我正在尝试对此查询进行数据绑定。
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
关于错误的任何想法?
感谢。
答案 0 :(得分:1)
Concat()
代替Join()
答案 1 :(得分:1)
我认为您需要按照此问题的答案中所述使用Concat - Inserting extra data in a linq result but not to the data source or waiting for submiting changes on a context object
此外,请注意
from ts in tsRepository.GetTable()
select new { IdTypeStage = Convert.ToDecimal(-1), Description = "Aucun", NomFormEval = "-" }
会为存储库中的每一行提供一个额外的“aucun”行 - 我猜这不是你想要的。
答案 2 :(得分:0)
使用LINQER等工具将SQL转换为LINQ。工具比我们更好: - )