[英]Entity Framework Linq Query to return list of IDs
我如何获得在 linq 中运送所有订单的公司 ID 列表? 场景:每家公司都有一堆客户和客户的订单。 从下表中,CompanyB 和 CompanyC 已将所有订单发送给客户,我想从 linq 查询中获取这些 ID。
3个表涉及公司、客户和订单
Company
CompanyID CompanyName
1 CompanyA
2 CompnayB
3 CompnayC
Customers
CustomerID CustomerName CompanyID
1 CustomerA 1
2 CustomerB 2
3 CustomerC 2
4 CustomerD 2
5 CustomerE 1
6 CustomerF 2
7 CustomerG 3
Orders
OrderID CustomerID Shipped
1 2 1
2 3 1
3 4 1
4 6 1
5 1 0
6 7 1
这是我尝试过的,但我没有得到正确的 output
var IDs = Company.Where(co => co.Customers.Any(cu => cu.Orders.Any(o => o.shipped))).ToList();
任何帮助深表感谢..
尝试这个:
var IDs = (from co in Company
join cu in Customers on co.CompanyID equals cu.CompanyID
join o in Orders on cu.CustomerID equals o.CustomerID
where o.Shipped
select new { co.CompanyID }).ToList();
我没有尝试运行它,但是如果我尝试All
而不是Any
会怎样? 也许,如果您在 EF 上使用数据库而不仅仅是一个集合,您应该启用延迟加载。 而且,由于您只需要ID
,我添加了Select
var IDs = Company
.Where(co => co.Customers.All(cu => cu.Orders.All(o => o.Shipped)))
.Select(co => co.CompanyID)
.ToList();
您可以使用 linq 连接两个表,如下所示:
var Ids = (from cu in Customers
join o in Orders on cu.CustomerId equals o.CustomerId
where o.Shipped
select cu.CompanyId).Distinct().ToList();
你可以使用 fluentApi:
var ids = Orders.Where(o => o.Shipped).Join(Customers, o => o.CustomerId, c => c.CustomerId, (o, c) => new
{
c.CompanyId
}).Distinct().ToList();
您可以依靠SelectMany
作为双重All
调用的替代方法:
var companyIds = Companies
.Where(co => co.Customers.SelectMany(c => c.Orders).All(o => o.shipped))
.Select(co => co.CompanyId)
.ToList();
对于您的要求,恕我直言,这感觉更加语义化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.