按分组拆分 Linq 列表
本文关键字:Linq 列表 拆分 | 更新日期: 2023-09-27 18:36:50
出于报告目的,我想将采购订单列表拆分为多个列表。每个购买地址一个列表。我知道可以按购买地址对列表进行分组,但我的问题是如何按此购买地址将列表拆分为多个列表,并使用这些多个列表创建单独的报告文件。
法典:
(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()
问题:如何将上述列表拆分为每次购买的多个列表地址?
有一个内置函数,我认为它可以做你想要的。如果我假设您的代码被分配给一个名为 query
的变量,那么您可以编写以下内容:
ILookup<string, ViewClass> queryLists = query.ToLookup(x => x.purchaseAddress);
这实质上会创建一个列表列表,您可以像字典一样访问该列表,只是每个值都是零个或多个值的列表。像这样:
IEnumerable<ViewClass> someList = queryLists["Some Address"];
只需将每个组转换为列表即可。
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();
您可以使用的另一个简单的内置函数是 GroupBy 函数。它的工作与ToLookup类似,但这意味着您的新列表是IQuerable的,不像字典和其他一些东西(请参阅本文以获取良好的细分)
var newList = orders.GroupBy(x => x.field1);
这将返回按您指定的字段分组的列表列表。