我試圖與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