gpt4 book ai didi

c# - LINQ 中导航属性查询的 ArgumentException

转载 作者:太空宇宙 更新时间:2023-11-03 23:18:47 27 4
gpt4 key购买 nike

我在使用 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));

但是它抛出了这个异常:

An exception of type 'System.ArgumentException' occurred in EntityFramework.dll but was not handled in user code

Additional information: The Include path expression must refer to a navigation property defined on the type. Use dotted paths for reference navigation properties and the Select operator for collection navigation properties.

请注意,我曾尝试使用 JOIN 来执行此操作,但那很丑陋,所以我决定使用内置导航属性。

我做错了什么?谢谢。

最佳答案

不幸的是,您无法在 Include 调用中过滤导航属性。正如异常(exception)所说,您需要引用导航属性。要过滤您的导航属性,您需要将查询投影到匿名类型或 DTO,例如:

query = query.Include(x => x.ServiceStatus)
.Select(s=>new {
//other properties that you need to project
Status=s.ServicesStatus.Where(p => p.serviceStatusID == 7)
});

一种在加载时过滤相关实体的方法是使用 Explicit Loading :

 var service= query.FistOrDefault();// this is an example to use a service instance
context.Entry(service)
.Collection(b => b.ServiceStatus)
.Query()
.Where(ss => ss.Where(p => p.serviceStatusID == 7)
.Load();

关于c# - LINQ 中导航属性查询的 ArgumentException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36202853/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com