我的查询在.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()
答案 0 :(得分:0)
.NET 3.5 Framework中的实体框架不支持DefaultIfEmpty()
方法。