我有一个PostInfo表和LikeInfo表,PostInfo有LikeInfo列表(对于帖子喜欢).PostInfo表有一个名为“LikeCount”的NotMapped属性。 我想要选择PostInfoes列表并加入到LikeInfo表中,并计算LikeInfoes的数量,并将此数量计入LikeCount属性。
这是我的样本:
var query = context.PostInfoes.Where(x => x.UserId == userId).Include(x => x.LikeInfoes);
foreach (var item in query)
{
item.LikeCount = item.LikeInfoes.Count;
}
return query.ToList();
这对我来说不是好方法,因为我确实在查询和设置LikeCount manualy 但是我不想要/需要在这种情况下包含LikeInfo表的完整peoperties 。
我找到了填写这家酒店的最佳方式。
答案 0 :(得分:5)
由于EF6不允许投影到实体类型,您需要使用包含所有必要数据的中间匿名类型投影的LINQ to Entities查询,然后切换到LINQ to Objects(通过AsEnumerable()
)并进行最终投影,使用委托块来执行必要的未映射属性修正:
var result = context.PostInfoes
.Where(x => x.UserId == userId)
.Select(x => new { Info = x, LikeCount = x.LikeInfoes.Count() })
.AsEnumerable()
.Select(x =>
{
x.Info.LikeCount = x.LikeCount;
return x.Info;
})
.ToList();