我试图与EF此查询工作,但它抛出一个异常:NotSupportedException异常:LINQ到实体无法识别方法
var c = ac.Communities.OrderBy(o => o.Posts.Count())
.Skip(page*limit)
.Take(limit)
.Select(o => o.ToViewModel()).ToArray();
从Community
模型ToViewModel()
方法是这样的:
public CommunityModel ToViewModel()
{
return new CommunityModel()
{
category = Category.Name,
created = CreationTime,
description = Description,
id = Id,
name = Name,
ownerId = Owner.Id,
postsCount = Posts.Count(),
score = Posts.Sum(o => o.Likes - o.Unlikes),
shortDescription = ShortDescription,
subscribersCount = Subscribers.Count(),
};
}
我在做什么错?
为了排除你的'ToViewModel'方法,弹出一个'.ToList()'在前面的'选择',看看你是否仍然存在这个问题。 – Stuart
@Stuart工作,谢谢!所以,基本上,'List'不再是'IQueryable',因此它不会将它转换为数据库的SQL查询,对吧?这意味着它在内存中完成所有工作,将'Community'类视为实际对象,而不是实体对象,对吗? – Reynevan
这是正确的,你在强制使用'ToList'的时候'IQueryable'的枚举,那么后面的Linq方法正在处理内存集合,并且不必担心转换为SQL – Stuart