我有一個名爲個案的表(或實體)。還有另一個表CaseStatus_Lookup,此表的主鍵是Cases表中的外鍵。根據LINQ中的查找計算
我想要做的是:對於每種狀態類型,我希望計數個案數。對於例如如果status =進行中,我想知道有多少個案件處於這種狀態。
另外一件事:我也想過濾基於UserID的Cases。
我在LINQ中嘗試了幾種方法,但無法獲得相差甚遠。我想知道是否有人可以幫忙。
我有一個名爲個案的表(或實體)。還有另一個表CaseStatus_Lookup,此表的主鍵是Cases表中的外鍵。根據LINQ中的查找計算
我想要做的是:對於每種狀態類型,我希望計數個案數。對於例如如果status =進行中,我想知道有多少個案件處於這種狀態。
另外一件事:我也想過濾基於UserID的Cases。
我在LINQ中嘗試了幾種方法,但無法獲得相差甚遠。我想知道是否有人可以幫忙。
嘗試的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
你需要返回的總和,並採取作爲參數狀態的功能: - 類似下面。
MyCaseStatusEnum caseStatus; //Pass your required status
int caseCount = myCases
.Where(r => r.Status == caseStatus)
.GroupBy(p => p.Status)
.Select(q => q.Count()).FirstOrDefault<int>();