【发布时间】:2017-05-11 12:51:54
【问题描述】:
我正在尝试按 2 个字段(类别,然后是供应商)对列表进行分组,但值不同。如果类别是“01”,则将所有成本相加。如果类别不是“01”,则按类别分组,然后按供应商。
一些演示数据:
List<MyItem> myItemList = new List<MyItem>();
myItemList.Add(new MyItem{Vendor="Ven1", Cost=100, Category="01"});
myItemList.Add(new MyItem{Vendor="Ven2", Cost=10, Category="02"});
myItemList.Add(new MyItem{Vendor="Ven3", Cost=50, Category="02"}));
myItemList.Add(new MyItem{Vendor="Ven2", Cost=40, Category="01"});
myItemList.Add(new MyItem{Vendor="Ven2", Cost=20, Category="01"});
myItemList.Add(new MyItem{Vendor="Ven3", Cost=30, Category="02"});
myItemList.Add(new MyItem{Vendor="Ven1", Cost=10, Category="03"});
我目前在做什么:
List<MyItem> groupedItems = myItemList.GroupBy(a=> new {a.Category, a.Vendor})
.Select(b=> new MyItem{
Vendor = b.First().Vendor,
Cost = b.Sum(c => c.Cost),
Category = b.First().Category
}).ToList();
我正在尝试做什么(也就是我的最佳猜测):
List<MyItem> groupedItems = myItemList.GroupBy(a=> new {a.Category.Where(z=>z.Category.Equals("01:)), a.Vendor})
.Select(b=> new MyItem{
Vendor = b.First().Vendor,
Cost = b.Sum(c => c.Cost),
Category = b.First().Category
}).ToList();
期望的结果:
Category = "01", Vendor = "N/A ", Cost = 160
Category = "02", Vendor = "Ven2", Cost = 10
Category = "02", Vendor = "Ven3", Cost = 80
Category = "03", Vendor = "Ven1", Cost = 10
【问题讨论】:
-
所以基本上你想将所有 01 类别无条件地分组到供应商,然后其他所有内容都按类别和供应商分组?您能否为您的示例数据显示所需的结果?
-
为什么是你的成本字符串?
-
您可以分别处理这些情况,然后合并结果。首先使用 Where 仅获取 01 类别中的项目,然后再获取其余项目。
-
@S.Petrosov 这不仅仅是一个坏例子。我会解决的。
-
@juharr 底部列表,标记为 Desired Result 是我想要的