需要C#查询的Linq - 一对多表关系,需要一对多记录

时间:2010-10-22 18:14:31

标签: c# linq

需要帮助才能在linq中实现这一目标。

我有3张桌子。

  1. 客户

  2. CustumerOrder

  3. 订单明细

  4. 我需要在一个查询中列出所有客户(仅当他们已经下了至少一个订单时),并且只有当订单价值超过100时,每个客户的所有订单才会列出。

    此致

    苛刻

2 个答案:

答案 0 :(得分:0)

这是基于某些假设的猜测:

var result = 
    from customer in Customers.Where(a => a.CustomerOrder.Count > 0)
    from order in CustomerOrder.Where(a => a.OrderDetails.Sum(b => b.Price) > 100)
    select new
    {
        customer, 
        order.OrderDetails
    }

答案 1 :(得分:0)

我说你想要这样的东西:

from c in Customers
where c.CustomerOrders.Any()
select new
{
  customer,
  Orders = 
    from co in c.CustomerOrders
    where co.TotalPrice > 100
    select co.OrderDetails
}

或者,如果您在CustomerOrder表中没有“TotalPrice”列,请将内部查询替换为:

Orders =
  from cp in c.CustomerOrders
  where co.OrderDetails.Sum (od => od.Price) > 100
  select co.OrderDetails

修改:如果您希望仅包含至少一个OrderTotalPrice超过100的订单的客户,请使用 let 语句:

from c in Customers
let highValueOrders = 
    from co in c.CustomerOrders
    where co.TotalPrice > 100
    select co.OrderDetails
where highValueOrders.Any()
select new
{
  customer,
  highValueOrders
}

您可以以类似的方式添加更多条件。