Linq Query with Join不工作.Net 3.5但适用于.Net 4+

时间:2013-05-24 13:44:36

标签: linq join lambda

我的查询在.Net 3.5 SP1中工作,直到我添加了一个连接。即使没有关联的用户实体,也建立了连接以允许从Comments实体中进行选择。我收到以下错误:

LINQ to Entities does not recognize the method 'System.Collections.Generic.IEnumerable`1[XXX.YYY.BusinessLayer.User] DefaultIfEmpty[User](System.Collections.Generic.IEnumerable`1[XXX.YYY.BusinessLayer.User])' method, and this method cannot be translated into a store expression.

我使用LinqPad验证了查询是否可以在.Net 4+中工作(我认为!)。

我在解决方案中的查询如下:

var comments = (from dic in _context.Comments
                        join u in _context.Users on dic.CommentUserId equals u.UserId into j1
                        from j2 in j1.DefaultIfEmpty()
                        where dic.Parent.Id == 406
                        select new { dic.CommentId, dic.CommentDate, dic.CommentText, j2.AccountName }).AsEnumerable()
                       .Select(x => new CommentInfo
                       {
                           CommentId = x.CommentId,
                           CommentDate = x.CommentDate,
                           CommentText = x.CommentText,
                           UserName = ActiveDirectoryUtil.GetUserDisplayName(x.AccountName)
                       });

我仍然是Linq和Lambda的新手,所以我仍然找到解决问题的方法。 ActiveDirectoryUtil.GetUserDisplayName是一个静态方法调用,用于执行查找以获取用户的显示名称。

添加以下几行后出现了问题:

... into j1 
from j2 in j1.DefaultIfEmpty()

1 个答案:

答案 0 :(得分:0)

.NET 3.5 Framework中的实体框架不支持DefaultIfEmpty()方法。