无法使用多个过滤查询包括在运行时获取异常

时间:2018-05-19 13:53:51

标签: c# entity-framework linq entity-framework-6

这是我的疑问:

RestTemplate restTemplate = new RestTemplate();
restTemplate.setErrorHandler(new MyResponseErrorHandler());
// now RestTemplate's behaviour for error status codes is customized

当我在 var units = _context.Units.Include(m => m.Modules.Select(t => t.Tests.Select(q => q.Questions))) .ToList(); 集合的末尾添加.Where()时,我在运行时会收到此异常:

  

System.ArgumentException:'包含路径表达式必须引用a   在类型上定义的导航属性。使用虚线路径   引用导航属性和集合的Select运算符   导航属性。       参数名称:路径'

如何在不收到错误的情况下过滤t.Tests集合?

只知道我想在客户端加载所有Units / Module / Tests.filter / Questions.filter。

我的模特:

EF模型:

t.Tests

为什么这不重复!

它不仅具有1到N的过滤问题,而且还具有N到M的关系,这对于已经解决的解决方案中显示的linq查询样式来说是不容易做到的。

1 个答案:

答案 0 :(得分:1)

Include在您要过滤子项的情况下不起作用。改为使用匿名类:

var unitsWithQuestions = _context.Units.Select(m => new {
    Unit = m
,   TestQuestions = m.Modules.Select(t =>
        t.Tests.Select(q => q.Questions)
    ).ToList()
}).ToList();

现在您可以迭代unitsWithQuestions,并通过引用匿名类的UnitTestQuestions成员来检索相关部分。