带有条件左连接的LINQ

时间:2014-07-17 09:34:46

标签: vb.net linq entity-framework

你好,我是linq的新手, 我试图使用LinQ进行左连接查询。这是我的问题:

SELECT B.[ID]
      ,A.[GroupID]
      ,B.[Year]
      ,B.[Month]
      ,B.[Col1]
      ,B.[Col2]
      ,B.[Col3]
      ,B.[Col4]
      ,B.[Col5] FROM MsGroups A
LEFT JOIN MsCKPNS B on 
A.GroupId = B.GroupId and B.Year = 2014 and B.Month = 3

这是我的linq查询:

Dim msckpn = (From g In db.MsGroup
                    Group Join c In db.MsCKPNs
                    On g.GroupId Equals c.GroupID Into
                    Group From a In Group.DefaultIfEmpty() _
                    Where a.Month = Month And a.Year = Year
                     Select New MsCKPN With {
                         .ID = Nothing,
                         .GroupID = g.GroupId,
                         .Month = Month,
                         .Year = Year,
                         .Col1 = a.Col1,
                         .Col2 = a.Col2,
                         .Col3 = a.Col3,
                         .Col4 = a.Col4,
                         .Col5 = a.Col5
                    }).ToList

但是,它显示错误:无法在LINQ to Entities查询中构造实体或复杂类型“MvcMISD.MsCKPN”。

我该怎么做才能修复查询?

由于

1 个答案:

答案 0 :(得分:0)

您无法创建这样的实体。原因是您不应该能够创建未链接到数据库中的记录或记录的实体。这个答案在下面的评论中给出了解释:https://stackoverflow.com/a/5325861/1737957您可以创建一个包含所需字段的匿名类型。

代码的其他一些部分看起来有点奇怪,但我对VB中的LINQ不太熟悉,所以我可能会误解你的查询。