【问题标题】:Splitting Linq List by grouping通过分组拆分 Linq 列表
【发布时间】:2012-06-09 12:21:53
【问题描述】:

出于报告目的,我想将采购订单列表拆分为多个列表。每个购买地址一份清单。我知道可以按购买地址对列表进行分组,但我的问题是如何按此购买地址将列表拆分为多个列表并使用这些多个列表创建单独的报告文件。

代码:

(from o in orders
group o by new {field1, field2, field3, field4} into og
orderby og.Key.field1
select new ViewClass
{
    purchaseAddress = og.Key.field1,
    product = og.key.field2,
    count = og.count
}).ToList()

问题:如何将上面的列表拆分为每个purchaseAddress的多个列表?

【问题讨论】:

  • 我认为您的问题更关注数据的呈现方式。它应该如何在屏幕上绘制。是吗?
  • 是的,它在演示中,但在我的情况下,在报告文件 (rdlc) 中。对于每个购买地址,我想创建一个特定的 PDF 文件。此时的报告文件是使用单个页面上的所有地址创建的。这个文件必须被分成多个文件,可以通过电子邮件发送到每个地址
  • 您正在为需要在团购地址添加分页符的所有数据创建单个 PDF
  • 我不太明白你为什么不能使用group 子句。它会根据需要将列表拆分为多个列表。
  • @amritpal-singh:我有分页符。但它仍然是一个文件。如果有多个文件,我可以为他们发送每个地址我的采购订单,而无需他们找出哪个部分是给他们的。如果有 4 个客户订购产品,这些订单会为每个生产商生成多个内部订单。

标签: c# linq


【解决方案1】:

我认为有一个内置函数可以满足您的需求。如果我假设您的代码被分配给一个名为 query 的变量,那么您可以这样写:

ILookup<string, ViewClass> queryLists = query.ToLookup(x => x.purchaseAddress);

这实际上创建了一个列表列表,您可以像字典一样访问,除了每个值都是零个或多个值的列表。比如:

IEnumerable<ViewClass> someList = queryLists["Some Address"];

【讨论】:

  • 不知道我使用了多少个可用地址:foreach(查询列表中的变量列表){ dosomething(querylist[list.Key]);}
【解决方案2】:

只需将每个组变成一个列表。

select new ViewClass 
{ 
    purchaseAddress = og.Key.field1, 
    product = og.key.field2, 
    count = og.count,
    List = og.ToList()
}).ToList();

哦,您的分组是实体的一种方式和页面的另一种方式......只需重新组合。

List<ViewClass> classes = (
  from o in orders   
  group o by new {field1, field2, field3, field4} into og   
  orderby og.Key.field1   
  select new ViewClass   
  {   
    purchaseAddress = og.Key.field1,   
    product = og.key.field2,   
    count = og.count   
  }).ToList();

List<List<ViewClass>> regrouped = (
  from c in classes
  group c by c.purchaseAddress into g
  select g.ToList()
).ToList();

【讨论】:

    【解决方案3】:

    您可以使用的另一个简单的内置函数是 GroupBy 函数。它的工作与 ToLookup 类似,但这意味着您的新列表是 IQuerable,不像字典和其他一些东西(请参阅此 article 以获得良好的细分)

    var newList = orders.GroupBy(x => x.field1);
    

    这将返回按您指定的字段分组的列表列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-27
      • 2014-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多