linq-to-sql中的分组和计数

本文关键字:linq-to-sql | 更新日期: 2023-09-27 18:21:40

我有下面的查询,它接收一个ID列表,我想进行计数。还有一个对象模型CountModel,它保存每个属性定义为int的计数

public class GetCountByStatus(List<int> TheIDs)
{
 ...using MyDC...
 var CountData = (from d in MyDC.Data
                  where TheIDs.Contains(d.ID)
                  group d by d.Status into statusgroup
                  select new CountModel()
                  { 
                     CountStatus1 = (from g in statusgroup
                                     where g.Status == 1
                                     select g).Count(),
                     CountStatus2 = (from g in statusgroup
                                     where g.Status == 2
                                     select g).Count(),
                     CountStatusN = ....
                   }).Single();

例如,如果没有状态为N的元素,此代码会崩溃吗?CountStatusN的计数是0吗?这是做我想做的事的最好方法吗?

谢谢。

linq-to-sql中的分组和计数

我会选择字典,试试这样的东西:

var countData = MyDC.Data.Where(y => TheIDs.Contains(y.ID))
    .GroupBy(y => y.Status).ToDictionary(y => y.Key, y => y.Count());

我自己也没有尝试过,也没有在VS中编写代码,但我认为这几乎就是你可以做到的。这将为你提供一个字典,其中键是状态,值是该状态的计数。

使用名为SomethingX的属性定义模型不是很灵活。这意味着当有了新的状态时,你必须对模型进行更改。相反,将数据保存在字典中可以避免这种情况。

Count()将始终返回一个整数,如果没有具有给定状态的元素,则该整数为0。因此CountStatusN也将始终是一个整数。