【问题标题】:LINQ JOIN with multiple conditions returning error具有多个条件的 LINQ JOIN 返回错误
【发布时间】:2013-08-19 09:32:09
【问题描述】:

我已针对这种情况查看了各种问答,但我的错误仍然存​​在。

我有以下几点:

Int32 eid = Convert.ToInt32(this.ddlPrograms.SelectedItem.Value);
var participants =
    from b in _dc.WebProgramParticipants
    join d in _dc.webeventaffiliations
        on new { b.UserID, eid } equals new { d.userid, d.eventid }
    join c in _dc.WebPersonalInfos
        on b.UserID equals c.UserID
    where (b.eventid == eid) select
    new { b.ParticipantID, c.FirstName, c.LastName, c.Email, d.institution };

有问题的联接类型 {b.UserID = int, b.eventid = int?} 和等于 {d.userid = int, d.eventid = int}

“连接子句中的一个表达式的类型不正确。类型推断在调用'Join'时失败。”的错误。不会消失。据说第一个连接有类型问题,但唯一的问题是 b.eventid 是一个可为空的,我认为包含 eid 变量会起作用,但它没有。

这是怎么回事?

【问题讨论】:

  • 两边各有哪些类型?
  • 看起来b.UserID 的类型与d.userid 的类型不同,和/或eidd.eventid 的类型相同,因此匿名对象有不同的类型。
  • 所有 ID 的类型都是 int。我必须创建变量 eid 来补偿 Nullable 类型 b.eventid
  • @cdhowie,你的评论让我从不同的角度看待它,问题不是类型,而是实际单词的匹配。
  • @mattgcon 您也可以添加以下演员阵容:(int?)d.eventid

标签: c# linq-to-sql join


【解决方案1】:

通过以下方式解决

var participants = from b in _dc.WebProgramParticipants join d in _dc.webeventaffiliations on new { UserID = b.UserID, eventid = eid } equals new { UserID = d.userid, eventid = d.eventid } join c in _dc.WebPersonalInfos on b.UserID equals c.UserID where (b.eventid == eid) select new { b.ParticipantID, c.FirstName, c.LastName, c.Email, d.institution };

确保连接条件两边的类型具有相同的大小写。 (无论如何都适用于 C#)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 2013-11-20
    相关资源
    最近更新 更多