根据此StackOverflow答案:
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();
为了快速概述我要在此处获取的内容,我试图获取与此公司对象相关联的所有活动表单族的列表,但是,无论何时以任何方式限制结果,结果集为空。
formFamilies = comp.FormFamily
,则它将返回两个结果,一个处于活动状态,一个处于非活动状态formFamilies = comp.FormFamily.Where(ff => true)
,则不返回任何内容formFamilies = comp.FormFamily.OrderBy(ff => ff.FormFamilyId)
,则不返回任何内容。我对comp.FormFamily
所做的任何修改都意味着结果集将不返回任何内容,我已经深入研究了SA的最深层以尝试找到解决方案,并尝试了所找到的每个解决方案,但是似乎没有什么可导致此列表返回任何内容。
答案 0 :(得分:0)
假设Company和FormFamily实体之间存在一对多的关系,我建议使用join语句。这样的事情应该可以满足您的需求。
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();
希望这会有所帮助。
答案 1 :(得分:0)
我不太了解您的查询应该做什么。但是在我看来,您不能仅在另一个Select结果方法上调用Select方法。
无论如何,您可以简单地使用Include
方法而不是进行投影。
var company = _context.Company
.Where(c => c.Id == id)
.Include(c => c.FormFamily).Where(ff => ff.IsActive ?? false)
.ToList();
没有测试。为了证明它是否可行,请确保在问题中放入一个实体模型。然后我可能会给出更准确的答案。