根据LINQ/lambda中Group By语句的计数创建计数

Ray*_*zer 2 c# linq lambda

我想要做的是将大量记录组合在一起Employer.然后,我想返回一个整数变量,该变量只有至少具有30记录的那些组的计数.

IE我有100订阅者Employer A,20at Employer B30at Employer C.

我把记录分组在一起然后提出来

Employer A - 100
Employer B - 20
Employer C - 30
Run Code Online (Sandbox Code Playgroud)

我想返回标量变量2.

这是我目前拥有的:

var Step1 =
    (from y in recordsActivstJoin
     where y.q.Market.Contains(market) && y.x.ActivistCodeID.Equals(activismCode)
     select new {y}).ToList();

            //this groups my previous query
var Step2 = (from z in Step1 group z by z.y.q.Employer into f select new {f}).ToList();
Run Code Online (Sandbox Code Playgroud)

当我观察当地人时,我可以看到它实际上从步骤1开始分组,其中步骤2中有34行到17行.现在,我想要缩小到只有组> = 30的那些.

有什么建议?

Jos*_*rty 5

我不是盲目地写LINQ的最好的,但我相当肯定你正在寻找一些非常接近以下的东西:

var Step1 =
                (from y in recordsActivstJoin
                 where y.q.Market.Contains(market) && y.x.ActivistCodeID.Equals(activismCode)
                 select new {y}).ToList();

                        //this groups my previous query
var Step2 = (from i in Step1 group i by i.y.q.Employer into groupedEmployees
select new 
{
    EmployeeCount = groupedEmployees.Count()
}).Where(n=>n.EmployeeCount >= 30).Count();
Run Code Online (Sandbox Code Playgroud)

帕特里克指出,这可以缩短为:

var Step2 = Step1.GroupBy(i => i.y.q.Employer).Count(g => g.Count() >= 30);
Run Code Online (Sandbox Code Playgroud)

Step2应该2在你的例子中.希望这可以帮助!

  • 可以缩短一点:`var Step2 = Step1.GroupBy(i => iyqEmployer).Count(g => g.Count()> 20);` (2认同)