我想在我的 linq 查询中延迟加载某个选择项。这是我的查询
var posts = from p in context.post
where p.post_isdeleted == false && p.post_parentid == null
select new
{
p.post_date,
p.post_id,
p.post_titleslug,
p.post_votecount,
FavoriteCount = context.PostVotes.Where(x => x.PostVote_postid == p.post_id).Count() //this should load latter
};
我已经删除了选择查询中的 FavoriteCount 项目,并希望稍后根据特定条件添加它。这是我延迟加载的方式
if (GetFavoriteInfo)
{
posts = posts.Select(x => new { FavoriteCount = context.PostVotes.Where(y => y.PostVote_postid == x.post_id).Count() });
}
上述查询出现语法错误。我该如何解决这个问题
最佳答案
当您删除前面查询中的 FavoriteCount
时,分配给 posts
的匿名类型不再有该字段;然后在第二个查询中你正在创建另一个匿名类型,只有有一个FavoriteCount
- 所以当你尝试重新分配它时posts
你会得到一个不兼容的类型错误。
实现此目的的一种方法是在第一个查询中保留 FavoriteCount
,但使其成为 FavoriteCount = -1
(或其他一些值以表明它没有)尚未加载),然后在第二个中你可以这样做:
posts = posts.Select(p => new { // reassign existing stuff,
p.post_date,
p.post_id,
p.post_titleslug,
p.post_votecount,
FavoriteCount = context.etc.etc.
});
您必须重新分配,因为匿名类型是不可变的;一种解决方法是使用这些字段创建一个 PostInfo
类,然后您只需在第二个查询中设置 FavoriteCount
。
关于c# - 如何将此 LINQ 查询转换为延迟加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2995106/