2013-03-08 56 views
0

我有一個名爲個案的表(或實體)。還有另一個表CaseStatus_Lookup,此表的主鍵是Cases表中的外鍵。根據LINQ中的查找計算

我想要做的是:對於每種狀態類型,我希望計數個案數。對於例如如果status =進行中,我想知道有多少個案件處於這種狀態。

另外一件事:我也想過濾基於UserID的Cases。

我在LINQ中嘗試了幾種方法,但無法獲得相差甚遠。我想知道是否有人可以幫忙。

回答

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

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>();