实体框架如何填充需要连接的NotMapped属性?

时间:2018-01-20 06:41:56

标签: c# join entity-framework-6

我有一个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

我找到了填写这家酒店的最佳方式。

1 个答案:

答案 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();