gpt4 book ai didi

c# - 如何将此 LINQ 查询转换为延迟加载

转载 作者:太空狗 更新时间:2023-10-29 23:27:07 25 4
gpt4 key购买 nike

我想在我的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com