【问题标题】:Linq Join errorLinq 加入错误
【发布时间】:2013-10-07 14:31:09
【问题描述】:

我在以下 linq 查询(第 2 行)中收到以下错误,我不明白如何更正。

连接子句中的一个表达式的类型不正确。 调用“加入”时类型推断失败。

equals 表达式中的所有 2 个变量都是 (string),所以我不确定为什么会导致此错误。有人有什么建议吗?

var studentlist = from t1 in  Extern
                  join t2 in EMPstatus //m receiving the error here 
                  on new { t1.id} equals new { id= t2.id }
                  join t3 in StatusofEmp
                  on new { t2.Sta_ID } equals new {Sta_ID = t3.Sta_ID }
                  where t3.Status = "INAKTIV" 
                  select new { t1.Name };

【问题讨论】:

  • 我们能得到类型类定义的sn-ps吗?
  • 虽然看起来它应该工作,但它会像on t1.id equals t2.id和后来的on t2.Sta_ID equals t3.Sta_ID一样简单。
  • (同样你也可以select t1.Name - 你不需要到处使用匿名类型。)你能得到一个加入工作吗?哦,我注意到您的 where 子句目前无效 - 您想要 where t3.Status == "INAKTIV" - 请注意 == 而不是 =
  • 以下每个表达式的类型是什么:t1.idt2.idt2.Sta_IDSta_ID

标签: c# linq


【解决方案1】:

使用join时无需创建新的匿名对象。

试试这样的:

var studentlist = 
    from t1 in  Extern
    join t2 in EMPstatus
    on t1.id equals t2.id
    join t3 in StatusofEmp
    on t2.Sta_ID equals t3.Sta_ID
    where t3.Status = "INAKTIV" 
    select new { t1.Name };

【讨论】:

    【解决方案2】:

    根据您的描述,我猜您的 id 列之一可能是可空的,而另一个不可为空。检查哪个是可空的,假设 t1 id 可以为空,而 t2 id 不能为空,然后在连接条件中设置波纹管语法 @987654321 @

    希望以上语法有助于解决您的问题。

    var studentlist = from t1 in  Extern
                      join t2 in EMPstatus //m receiving the error here 
                      on  id=(t1.id??0) equals  id= t2.id 
                      join t3 in StatusofEmp
                      on new { t2.Sta_ID } equals new {Sta_ID = t3.Sta_ID }
                      where t3.Status = "INAKTIV" 
                      select new { t1.Name };
    

    【讨论】:

    • 它可能是一个可以为空的,或者一个可能是双精度而另一个是整数,或者一个可能是一个数字的字符串表示,而另一个实际上是一个数字,或者任何其他的数字选项。 OP 确实需要说明相关类型才能给出答案。此外,添加了两个 id= 位后,此代码将无法编译。只需删除它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多