【发布时间】:2016-03-24 23:30:30
【问题描述】:
我在使用 Entity Framework 6 的 Visual Studio 2015 WPF 应用程序中有以下 LINQ 查询:
var query = Context.Services.AsQueryable();
Services 实体具有以下导航属性:
public virtual ICollection<ServiceStatu> ServiceStatus { get; set; }
一个服务可以有 0 个或多个 ServiceStatus。我正在尝试使用Include 获取状态等于 7 的服务:
query = query.Include(x => x.ServiceStatus.Where(p => p.serviceStatusID == 7));
但它抛出了这个异常:
EntityFramework.dll 中出现“System.ArgumentException”类型的异常,但未在用户代码中处理
附加信息:包含路径表达式必须引用在类型上定义的导航属性。对引用导航属性使用虚线路径,对集合导航属性使用 Select 运算符。
请注意,我曾尝试使用 JOINs 执行此操作,但这很丑,所以我决定使用内置的导航属性。
我做错了什么?谢谢。
【问题讨论】:
-
Include用于急切地加载所有内容。它不能包含过滤器 (Where)。 -
谢谢,@IvanStoev。那么我该如何解决这个问题以引用 nav 属性并对其进行过滤?
-
将
where放在include方法调用之后,而不是放在里面。 -
如果你只是想获得状态为7的服务,那么你可以使用
var query = Context.Services.Where(x => x.ServiceStatus.Any(s => s.serviceStatusID == 7)) -
我正在处理 Services 实体(不在我上面的代码中),然后将其添加到该查询中
标签: c# entity-framework linq