繁体   English   中英

实体框架 Linq 查询返回 ID 列表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM