我有一个名为个案的表(或实体)。还有另一个表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>();