基于LINQ中的查找计数

时间:2013-03-08 07:07:58

标签: linq

我有一个名为Cases的表(或实体)。还有另一个表CaseStatus_Lookup,该表的主键是Cases表中的外键。

我想要做的是:对于每种状态类型,我想要案例数量。对于例如如果status =正在进行中,我想知道有多少案例处于该状态。

另一件事:我还想根据UserID过滤案例。

我在LINQ中尝试了几种方法但是远远不能改变。我想知道是否有人可以提供帮助。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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>();