奇怪的LINQ查询错误

本文关键字:查询 错误 LINQ | 更新日期: 2023-09-27 17:58:03

我正在尝试对该查询进行数据绑定。

 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

对这个错误有什么想法吗?

谢谢。

奇怪的LINQ查询错误

我认为您需要像这个问题的答案中所描述的那样使用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.