0

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

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

另一件事:我还想根据用户 ID 过滤案例。

我在 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

You need a function that returns the sum and takes the status as parameter :- something like below.

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 回答