2012-06-09 94 views
4

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

代码:

(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多个列表?

+0

我认为你的问题更关心数据的表示。它应该如何绘制在屏幕上。是吗? –

+0

是的,它是在演示文稿中,但在我的情况下,在报告文件(rdlc)。对于每个购买地址,我想创建一个特定的PDF文件。此时的报告文件是使用单个页面上的所有地址创建的。这个文件必须被分割成多个文件,可以通过电子邮件发送到每个地址 –

+0

您正在为所有需要添加分页符的团体字段购买地址创建单个PDF –

回答

10

有一个内置函数,我认为做你想要的。如果我假设你的代码被分配到一个名为query变量,那么你可以这样写:

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

这本质上创建访问像一本字典列出的清单,除了每个值是零或列表更多的价值。例如:

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

不知道我有多少个可用的地址可用:foreach(var list in querylists){dosomething(querylist [list.Key]);} –

2

只需将每个组变成一个List。

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(); 
0

另一个可以使用的简单内置函数是GroupBy函数。它做类似的工作作为ToLookup但它意味着你的新名单IQuerable,不能像字典和其他一些东西(见本article一个好的击穿)

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

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