执行一些LINQ后,我将这些数据作为匿名类型的IQueryable
:
Cat Type Count
----------------
A 1 10
B 1 15
C 1 25
D 1 5
A 2 15
C 2 30
D 2 20
B 2 10
现在,对于每个Cat,我想根据LINQ的Type值选择Count。
输出应该是这样的:
Cat Type1Count Type2Count
---------------------------
A 10 15
B 15 10
C 25 30
D 5 20
你可以尝试使用groupby
然后使用select
做转轴。
var query = myList
.GroupBy(c => c.Cat)
.Select(g => new {
Cat = g.Key,
Type1Count = g.Where(a => a.Type == 1).Sum(c => c.Count),
Type2Count = g.Where(a => a.Type == 2).Sum(c => c.Count)
});
结果
Cat:A Type1Count:10 Type2Count:15
Cat:B Type1Count:15 Type2Count:10
Cat:C Type1Count:25 Type2Count:30
Cat:D Type1Count:5 Type2Count:20
所以基本上你需要按Cat和Type分组并得到Count的总和:
myList.GroupBy(x => new { x.Cat, x.Type }).Select(x => new { Cat = x.Key.Cat, Type = x.Key.Type, CountForTypeAndCat = x.Sum(y=>y.Count) })
这将允许您获取任何类型的信息,不仅是1和2
foreach (var item in query.OrderBy(x=>x.Cat).ThenBy(x=>x.Type))
{
Console.WriteLine(string.Format("Cat:{0} Type:{1} CountForTypeAndCat:{2}", item.Cat, item.Type, item.CountForTypeAndCat));
}