0

Cases という名前のテーブル (またはエンティティ) があります。別のテーブル CaseStatus_Lookup があり、このテーブルの主キーは Cases テーブルの外部キーです。

私がやりたいことは次のとおりです。すべてのステータスタイプについて、ケースの数が必要です。たとえば if status = in progress 、そのステータスにあるケースの数を知りたいです。

もう 1 つ: UserID に基づいて Cases をフィルター処理したいと考えています。

私はLINQでいくつかの方法を試しましたが、遠くまで行くことができませんでした。誰かが助けてくれるかどうか疑問に思っていました。

4

2 に答える 2

0

Linqを試す.GroupBy

あなたのエンティティ構造を想定しています

あなたのCaseエンティティが

public class Case
{
  public int Id{get;set;}
  public int CaseStatusId{get;set;}
  public int UserId{get;set;}


  //navigational fields
  public virtual CaseStatus CaseStatus {get;set;}
}

あなたのCaseStatusエンティティが次のようなものであるとします:

public class CaseStatus
{
   public int Id{get;set;}
   public string Name{get;set;}

  //navigational fields..
  public virtual ICollection<Case> Cases{get;set;}

}

次に、これを行うことができます:

using (myDbContext db = new myDbContext())
{
   var query = db.Cases.GroupBy(case => case.CaseStatus.Name)
              .Select(group => 
                    new { 
                          Name = group.Key,
                          Cases= group.OrderBy(x => x.Id),
                          Count= group.Count()
                        }
                     ).ToList();
   //query will give you count of cases grouped by CaseStatus.


}

同様に、userId に基づいて結果をさらにフィルタリングできます。

Linq .GroupByについて調べ始める

于 2013-03-08T07:37:31.777 に答える
0

合計を返し、ステータスをパラメーターとして受け取る関数が必要です:-以下のようなもの。

MyCaseStatusEnum caseStatus; //Pass your required status
int caseCount = myCases
                .Where(r => r.Status == caseStatus) 
                .GroupBy(p => p.Status)
                .Select(q => q.Count()).FirstOrDefault<int>();
于 2013-03-08T09:53:55.647 に答える