LINQ to Entities的Include()方法无效

5
以下LINQ to Entities查询(使用EF 4.1 Code-First)旨在基于 Campaigns 和 Users 创建视图模型列表。我已经预先加载了每个广告系列的属性 Category ,使得每个广告系列都应该填充适当的数据到其 Category 参考属性中。但似乎这种急切加载在某处丢失了,因此我无法像这样访问类别: campViewModels [0] .Campaign.Category 。它总是null。
var campViewModels = ctx.Campaigns
.Include(c => c.Category)
.Where(c => c.Title.Contains(searchText)).Join(
    ctx.Users,
    c => c.CampaignId,
    u => u.CampaignId,
    (c, u) => new {c, u})
    .GroupBy(cu => cu.c)
    .Select(g => new CampaignViewModel { Campaign =  g.Key, MemberCount=g.Count()})
    .OrderByDescending(vm => vm.MemberCount)
    .Skip(pageIndex)
    .Take(pageSize)
    .ToList();  

为解决这个问题,我已经更改了我的视图模型定义,并添加了 CategoryText 属性并在查询中填充它。
Select(g => new CampaignViewModel { Campaign =  g.Key, MemberCount=g.Count(), CategoryText = g.Key.Category.Title})  

但我很好奇为什么无法显式加载分类?


1
Include 和投影的组合是一个问题:https://dev59.com/wG855IYBdhLWcg3wNhZ1#4475504(特别是答案中的链接) - Slauma
1个回答

11

Include 在将数据投影到新类型、使用 joingroup by 时会被忽略。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接