【发布时间】:2017-04-13 03:55:52
【问题描述】:
我有一个使用 EF 6 和 MVC 5 的应用程序,可以很好地输入数据,但现在当我尝试显示其中的一些数据时,我遇到了麻烦。我的实体的基本布局如下图所示:
我遇到问题的第一部分是查询和过滤数据。我想返回存在调查和签核但没有批准的场所和相关数据的列表。在直接 SQL 中,现在可以使用的查询是:
SELECT *
FROM Premises p LEFT OUTER JOIN Approvals a ON a.Id = p.Id
JOIN Surveys s ON s.PremiseId = p.Id
JOIN SignOffs so ON so.Id = s.Id
WHERE a.ApprovedBy IS NULL
我开始的代码是这样的:
var premises = Premises.Include(p => p.Approval)
.Include(p => p.Surveys)
.Include(p => p.Surveys.Select(s => s.SignOff));
这似乎*返回包括子数据在内的所有记录,但是当我尝试过滤它以便只获得具有签核记录但没有批准的记录时,它没有工作。
var premises = Premises.Include(p => p.Approval).Where(p => p.Approval.ApprovedBy == null)
.Include(p => p.Surveys)
.Include(p => p.Surveys.Select(s => s.SignOff).Where(s => s.Signature != null));
如果我使用此代码,我会收到此错误:
包含路径表达式必须引用在类型上定义的导航属性。对引用导航属性使用虚线路径,对集合导航属性使用 Select 运算符。 参数名称:路径
我已经改变了这个查询很多来尝试不同的事情,所以我不确定我做了什么,但我认为第一个 Where 语句可能会自行工作,但第二个肯定会导致错误。
我需要如何构造我的查询以使其返回正确过滤的请求数据?
另外,我在上面加了一个星号,表示查询似乎返回所有数据和子数据,因为我实际上无法对其进行测试。当我试图为此编写我的 Razor CSHTML 页面时,它并没有给我对子数据和孙数据的智能感知,如果我输入我认为应该是的内容,我会收到错误。我如何需要在页面上引用这些数据?
【问题讨论】:
标签: entity-framework asp.net-mvc-5