【问题标题】:Linq in C# Query needed - One to many table relationship, one to many records neededC# Query 中的 Linq 需要 - 一对多表关系,需要一对多记录
【发布时间】:2010-10-23 16:10:27
【问题描述】:

需要帮助才能在 linq 中完成此操作。

我有 3 张桌子。

  1. 客户

  2. 客户订单

  3. 订单详情

只有当订单价值大于 100 时,我才需要在一个查询中列出所有客户(仅当他们至少下了一个订单时)以及每个客户的所有订单。

问候,

严厉

【问题讨论】:

  • 请添加更多详细信息,而不仅仅是表名。例如,列。更好的是,由于这是 LinqToSql,请提供您的类/属性名称。
  • 嗨,柯克,假设有以下列 - 1. 客户 - CustomerId,CustomerName 2. CustomerOrder - OrderId, CutomerId, OrderAmount 3. OrderDetails - OrderId, OrderDate...... 现在请让我知道如何使用 Linq 查询获得 Dictionary> 之类的集合......希望这很能说明问题。这只是常见的客户、订单场景,其他细节可以根据场景假设。

标签: c# linq


【解决方案1】:

我会说你想要这样的东西:

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
}

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

【讨论】:

  • 非常感谢大家。我真的很感谢这种快速的反应。但是此查询没有考虑以下部分 - 只有当客户至少有一个 OrderTotalPrice 超过 100 的订单时,他才会出现在最终列表中。仅当客户为“常规”客户类型时,至少有一个年龄 > 30 的订单或如果客户为“稀有”类型,则年龄 > 35 的客户。 CustomerType 存储在 CustomerDetails 表中。请帮我解决这个问题.. 问候,Harshal
  • 非常感谢 Joe.. 几个问题 - 1. 我们可以在 LINQ 查询或 Lambda 表达式中调用 C# 函数吗?我需要这个来计算年龄,在我的数据库中有一个生日字段,我需要从这个字段计算年龄 2。我如何从上面的 LINQ 查询中获取列表,现在我只需要来自上面的查询的客户有包含客户详细信息的行数更多。我在这里真的很困惑。不知道如何将其传递给 UI。我可以得到类似 Dictionary> 的东西吗?
  • 你不能在通过 L2S 或 EF 管道的 lambda 表达式中调用你自己的函数。如需解决方法,请查看:mathgeekcoder.blogspot.com/2008/07/…
【解决方案2】:

以下是基于一些假设的猜测:

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
    }

【讨论】:

    猜你喜欢
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多