实体框架 6 基于子项中的字段选择项

本文关键字:字段 选择 框架 实体 | 更新日期: 2023-09-27 18:04:19

EF6 MVC5

我有一张Orders桌。每个订单都有一个Customer

我正在尝试搜索Orders,这些客户的surname包含字符串。

所以一个Order有一个Customer但一个Customer可以有很多Orders

我不能完全得到我需要的东西。我假设先获得客户然后获取订单更好(更有效?(,而不是获取所有订单然后过滤客户 - 所以这是我的尝试:

List<Order> orders = new List<Order>();
orders = db.Contacts.Where(c => c.NameLast.Contains(surnameContains)).Select(c => c.Orders).ToList();

上面给出了错误:

无法隐式转换类型 'System.Collections.Generic.List>" 到"System.Collections.Generic.List">

所以我认为上面的内容是返回一个Orders列表 - 这是有道理的 - 一个客户列表,每个Customer都包含一个Orders列表。我想也许我可以addRange

orders.AddRange(db.Contacts.Where(c => c.NameLast.Contains(surnameContains)).Select(c => c.Orders));

这也不起作用 - 错误=

参数 1:无法从 "系统.林克.IQueryable>" 到 'System.Collections.Generic.IEnumerable'

如果有任何指示可以帮助解决这个问题,我将不胜感激。我想要的结果是Order列表。

实体框架 6 基于子项中的字段选择项

在"订单"表中,是否有"客户/联系人"字段?如果是,您可以测试以下内容:

List<Order> orders = new List<Order>();
orders = db.Orders.Where(o => o.Customer.NameLast.Contains(surnameContains)).ToList();

如果在"订单"表中,您只有一个客户/联系人 ID,则可以测试以下内容:

List<int> ListeID = db.Contacts.Where(c => c.NameLast.Contains(surnameContains)).Select(c => c.ID).ToList();
List<Order> orders = new List<Order>();
orders = db.Orders.Where(o => ListeID.Contains(o.CustomerID)).ToList();

或类似的东西。