使用 Entity Framework 过滤相关实体

Filtering Related Entites with Entity Framework

根据 Whosebug 的回答:

Linq to Entities - how to filter on child entities

您应该能够通过使用投影来过滤 Entity Framework 中的相关实体列表,就像我在此处所做的那样:

Company company = _context.Company
.Where(g => g.CompanyId == id)
.Select(comp => new
{
    group = comp,
    operators = comp.Operator,
    formFamilies = comp.FormFamily.Where(ff => ff.IsActive ?? false)
}).AsEnumerable().Select(i => i.group).FirstOrDefault();

为了快速了解我在这里尝试获取的内容,我尝试获取与此公司对象关联的所有活动表单系列的列表,但是,每当我将结果限制在任何方式,结果集为空。

我对 comp.FormFamily 所做的任何修改都意味着结果集 return 什么都没有,我已经挖掘了 SA 的最深处以试图找到解决方案,并尝试了每一个我找到了解决方案,但似乎没有什么可以导致此列表 return 任何东西。

假设 Company 和 FormFamily 实体具有一对多关系,我建议使用这样的联接 statement.Something 应该可以满足您的需求。

  var company =  from c in _context.Company
                           join f in _context.FormFamily
                           on c.Id equals f.CompanyId   
                           where c.Id == id
                           select new Company()
                           {
                               Id = c.Id,
                               operators = c.Operator.ToList(),
                               formFamilies = c.FormFamily.Where(x=>x.IsActive == 
                                               false).ToList()
                           } .FirstOrDefault();

希望对您有所帮助。

我不太明白你的查询应该做什么。但在我看来,您不能只在另一个 Select 结果方法上调用 Select 方法。

无论如何,您可以简单地使用 Include 方法而不是投影。

var company = _context.Company
    .Where(c => c.Id == id)
    .Include(c => c.FormFamily).Where(ff => ff.IsActive ?? false)
    .ToList();

没测试过。要证明它是否有效,请确保将实体模型放入问题中。那么我可能会给出更准确的答案。