执行一些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
现在,对于每只猫,我都希望使用LINQ根据类型值选择计数。
输出应如下所示:
Cat Type1Count Type2Count
---------------------------
A 10 15
B 15 10
C 25 30
D 5 20
答案 0 :(得分:1)
您可以尝试先使用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
答案 1 :(得分:0)
因此,基本上,您需要按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));
}