我上了一堂课:
public class result
{
public int A;
public int B;
public int C;
}
我列出了它:
public static List<result> results = new List<result>();
然后我用随机数据填充该列表 像10,000,000个企业的东西,其中a,b和c的值为0到24。
我想在我的控制台中显示已找到的组合以及有多少组合 在SQL中,它会像:
SELECT A, B, C, COUNT(*) AS total
FROM results
GROUP BY A, B, C
我尝试了很多东西,我想我可以写一本关于它的书。 我试过的一些东西:
var query1 = results.GroupBy(x => new { x.A, x.B, x.C }).Select(group => new { Value = group.Key, Count = group.Count() });
var query2 = from r in results group r by new { r.A, r.B, r.C } into rGroup select rGroup;
var query3 = results.GroupBy(x => new { x.A, x.B, x.C }) .Where(g => g.Count() > 1).ToDictionary(x => x.Key, y => y.Count());
var query4 = from r in results
group r by new { r.A, r.B, r.C } into rGroup
select new { key = rGroup.Key, cnt = rGroup.Count() };
但似乎没有任何效果。 我想找回一个包含a,b,c值的列表以及已找到的数量的数量。
然而我无法让它工作,我尝试了几个小时的谷歌并尝试了一切,在这一点上我完全迷失了。
答案 0 :(得分:4)
为了完整起见,这是一个完整的例子。
与nlawalker相同的解决方案,产生了一个词典。
public class result
{
public int A;
public int B;
public int C;
public result(int a, int b, int c)
{
A = a;
B = b;
C = c;
}
}
static void Main(string[] args)
{
Random r = new Random(23);
var data = new List<result>();
for (int i = 0; i < 100; i++)
data.Add(new result(r.Next(1, 3), r.Next(1, 3), r.Next(1, 3)));
var dic = data
.GroupBy(k => new { k.A, k.B, k.C })
.ToDictionary(g => g.Key, g => g.Count());
foreach (var kvp in dic)
Console.WriteLine($"({kvp.Key.A},{kvp.Key.B},{kvp.Key.C}) : {kvp.Value}");
Console.ReadLine();
}
输出:
(2,2,2) : 13
(1,2,2) : 11
(2,1,1) : 9
(1,1,1) : 16
(1,2,1) : 14
(1,1,2) : 15
(2,1,2) : 7
(2,2,1) : 15
答案 1 :(得分:2)
你让GroupBy部分正确 - 你只需要将组选择到另一个具有该组的A,B和C值的对象,以及该组的计数:
results.GroupBy(x => new { x.A, x.B, x.C })
.Select(g => new { g.Key.A, g.Key.B, g.Key.C, Count = g.Count()})