我正在尝试对该查询进行数据绑定。
cboTypeStage.DataSource =
(
from ts in tsRepository.GetTable()
select new { IdTypeStage = Convert.ToDecimal(-1), Description = "Aucun", NomFormEval = "-" }
)
.Union
(
from ts in tsRepository.GetTable()
join o in oRepository.GetTable() on ts.IdOrthEvalFormulaire equals o.IdOrthEvalFormulaire
where (ts.IdProgramme == Convert.ToDecimal(Session["selectedProg"]))
select new { IdTypeStage = ts.IdTypeStage, Description = ts.Description, NomFormEval = ((o.Nom == null) ? "Aucun" : o.Nom) }
);
但我似乎无法让它发挥作用。我得到下一个错误:
无法将"System.Data.Linq.SqlClient.SqlNew"类型的对象强制转换为"System.Data.Linq.SqlClient.SqlValue"类型
我想将此SQL查询转换为LINQ
SELECT -1 AS IdTypeStage, 'Aucun' AS Description, '-' AS NomFormEval
UNION
SELECT ts.IdTypeStage AS IdTypeStage, ts.Description AS Description, ISNULL(eref.Nom, 'Aucun') AS NomFormEval FROM TypeStage AS ts
LEFT OUTER JOIN OrthEvalFormulaire AS eref ON eref.IdOrthEvalFormulaire = ts.IdEvalFormulaire
WHERE IdProgramme = @IdProgramme
对这个错误有什么想法吗?
谢谢。
我认为您需要像这个问题的答案中所描述的那样使用Concat-在linq结果中插入额外的数据,但不插入到数据源,或者等待提交上下文对象上的更改
此外,请注意
from ts in tsRepository.GetTable()
select new { IdTypeStage = Convert.ToDecimal(-1), Description = "Aucun", NomFormEval = "-" }
将为存储库中的每一行提供一个额外的"aucun"行——我猜这不是您想要的。
- 尝试使用
Concat()
而不是Join()
- 尝试创建非匿名类型而是强类型
使用LINQER等工具将SQL转换为LINQ。工具在这方面比我们好得多:-)
请参阅http://www.sqltolinq.com.