【问题标题】:Using LINQ To Find Total Number of Objects in C#使用 LINQ 查找 C# 中的对象总数
【发布时间】:2017-02-09 03:49:46
【问题描述】:

我有一个 Customer 类,它包含一个 Order 类数组。

    class Customer
{
    public string firstname { get; set; }
    public string lastname { get; set; }

    public Order[] orders {get; set;}
}

我需要编写一个 LINQ 来查找所有客户的订单总数,但我不明白该怎么做。例如,我创建了 8 个客户,每个客户有 3 个订单,所以我应该打印出 24 个。

感谢任何帮助!

【问题讨论】:

  • 你能提供一些你已经做过的代码吗?

标签: c# linq class object


【解决方案1】:

你可以使用其中任何一个。

// flattens order collection.
var result = custList.SelectMany(x => x.orders).Count();

var result = custList.Sum(x=>x.orders.Count());

【讨论】:

  • 是的,成功了!谢谢你。我想我了解如何在对象对象上使用 LINQ。
  • 没问题,我很高兴它有帮助。
【解决方案2】:
 var result = custList.SelectMany(x => x.orders).Count();

【讨论】:

  • 感谢您的回复。所以返回给我 8 可能是看到每个客户的订单,但不计算每个客户的订单数量......在我的情况下应该返回 24
  • 在这种情况下你应该使用 selectMany
  • 正确 - 选择为每个客户返回一个 Order[],然后计算这些客户的数量 - 这将与客户数量相同。您需要按照上述答案中的建议使用SumSelectMany
【解决方案3】:

您当然可以使用var countOfOrders = customers.SelectMany(x => x.orders).Count();,但您会发现它更易读:

var orders =
    from c in customers
    from o in c.orders
    select o;

var countOfOrders = orders.Count();

【讨论】:

    【解决方案4】:

    您必须使用SelectMany()。此方法将列出所有订单。然后你就可以数数了:

    var allordersNumber = customers.SelectMany(x => x.Orders).Count();

    请在MSDN 中阅读有关SelectMany() 的更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多