奇怪的LINQ查询错误

时间:2011-05-30 14:38:57

标签: c# sql linq linq-to-sql exception-handling

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

 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

关于错误的任何想法?

感谢。

3 个答案:

答案 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。工具比我们更好: - )

请参阅http://www.sqltolinq.com