C# 如何使用linq进行计数(结果必须是IQueryable)?

C# 如何使用linq进行计数(结果必须是IQueryable)?,c#,linq,C#,Linq,我想要一份员工名单,他们生病超过x次。你是怎么做到的 示例: EmpId、名称、日期 约翰,1/4/2016 2,Peter,2016年1月7日 3,最大,2016年1月14日 5,杰克,2016年1月22日 约翰,2016年2月2日 3,最大,2016年2月9日 彼得,2016年2月14日 3,最大,2016年3月1日 约翰,2016年3月4日 4、西蒙,2016年3月9日 三次或三次以上的人都生病了 结果是: EmpId、名称、日期 约翰,1/4/2016 3,最大值,2016年2月9日 S

我想要一份员工名单,他们生病超过x次。你是怎么做到的

示例:
EmpId、名称、日期
约翰,1/4/2016
2,Peter,2016年1月7日
3,最大,2016年1月14日
5,杰克,2016年1月22日
约翰,2016年2月2日
3,最大,2016年2月9日
彼得,2016年2月14日
3,最大,2016年3月1日
约翰,2016年3月4日
4、西蒙,2016年3月9日

三次或三次以上的人都生病了

结果是:
EmpId、名称、日期
约翰,1/4/2016
3,最大值,2016年2月9日

SQL

select EmpId, count(MyId) from MyTable group by EmpId
代码

private IQueryable<MyTable> MyQuery(SelectParams selectParams)
{
query = db.MyTables.Where(mt => mt.Active);

if (selectParams.MinXIll > 0)
query = query.GroupBy(sb => sb.EmpId).Where(sb => sb.Count() >= selectParams.MinXIll);

return query;
}
private IQueryable MyQuery(SelectParams SelectParams)
{
query=db.MyTables.Where(mt=>mt.Active);
如果(选择params.MinXIll>0)
query=query.GroupBy(sb=>sb.EmpId)。其中(sb=>sb.Count()>=selectParams.MinXIll);
返回查询;
}
如果要从第一次查询返回列表,请使用
ToList()。可以使用LINQ进一步筛选列表:

// get all active employees
// assume active field is boolean
List<MyTable> list = db.MyTables.Where(mt => mt.Active == true).ToList();

if (selectParams.MinXIll > 0)
{
    // filter result list to create another list contains proper data
    // assume TotalIll is your key value to determine how many illness on an employee
    var result = list.GroupBy(sb => sb.EmpId).Where(sb => sb.TotalIll >= selectParams.MinXIll).Select(sb => sb.EmpId, sb.MyId.Count()).ToList();
}
//获取所有活动员工
//假设活动字段是布尔值
List List=db.MyTables.Where(mt=>mt.Active==true.ToList();
如果(选择params.MinXIll>0)
{
//筛选结果列表以创建另一个包含正确数据的列表
//假设TotalIll是确定员工患病人数的关键值
var result=list.GroupBy(sb=>sb.EmpId)。其中(sb=>sb.TotalIll>=selectParams.MinXIll)。选择(sb=>sb.EmpId,sb.MyId.Count()).ToList();
}
希望这会有帮助,CMIIW。

试试这个

        query = from q1 in query
                from q2 in (query.GroupBy(sb => sb.EmpId)
                                 .Select(i => new { EmpId = i.Key, EmpCount = i.Count() })
                                 .Where(i => i.EmpCount >= selectParams.MinXIll)
                        ) on q1.EmpId equals q2.EmpId
                select q1;
还是这个

        query = from q1 in query
                where
                    (query.GroupBy(sb => sb.EmpId)
                          .Select(i => new { EmpId = i.Key, EmpCount = i.Count() })
                          .Where(i => i.EmpCount >= selectParams.MinXIll)
                          .Select(i => i.EmpId)
                     ).Contains(q1.EmpId)
                select q1;

显示员工是否生病的财产在哪里?它是否处于激活状态?有了发布的代码,我发现很难掌握整个组织的价值。计数是不可计算的。它必须是Count(int)或IQuerable,或者只是将其具体化为一个列表或数组