2016-06-24 5 views
-3

私はx回以上病気である従業員のリストを持っています。あなたはどうやってそれをしますか?linqを使用してカウントする方法(結果はIQueryableでなければなりません)?

例:
EMPID、名前、日付
1、ジョン、2016年1月4日
2、ピーター、2016年1月7日
3、マックス、2016年1月14日
図5に示すように、ジャック、2016年1月22日
1、ジョン、2016年2月2日
3、マックス、2016年2月9日
2、ピーター、2016年2月14日
3、マックス、3/1/2016
1、John、3/4/2016
4、Simon、3/9/2016

3回以上病気の人。

結果は以下:
EMPID、名前、日付
1、ジョン、2016年1月4日
3、マックス、2016年2月9日

SQL

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

CODE

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; 
} 
+1

をお試しくださいそれは 'mt.Active'ですか?投稿されたコードでは、全体の価値組織を把握することが難しいと感じています –

+0

カウントをIQuerableにすることはできません。 Count(int)またはIQuerableにするか、リストまたは配列に変換するだけです – llouk

答えて

1

どこ従業員が病気であるかどうかを示すプロパティがありますか?この

 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; 

またはこの1

 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; 
+0

これは私が探しているものです。 – user1531040

1

最初のクエリからリストを返す場合は、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(); 
} 

これは役に立つかもしれません、CMIIW。

+0

ありがとうございます。 – user1531040

関連する問題