C# linqtosql中的分组和计数

C# linqtosql中的分组和计数,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,我有一个接收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.Stat

我有一个接收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();
公共类GetCountByStatus(列出ID)
{
…使用MyDC。。。
var CountData=(来自MyDC.Data中的d
其中theid.包含(d.ID)
按d分组。状态分为状态组
选择新CountModel()
{ 
CountStatus1=(来自statusgroup中的g
其中g.Status==1
选择g).Count(),
CountStatus2=(来自statusgroup中的g
其中g.Status==2
选择g).Count(),
CountStatusN=。。。。
}).Single();
例如,如果没有状态为N的元素,该代码会崩溃吗?或者CountStatusN的计数是0吗?这是我想要的最好方法吗


谢谢。

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

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

我会选择字典,请尝试以下操作:

var countData = MyDC.Data.Where(y => TheIDs.Contains(y.ID))
    .GroupBy(y => y.Status).ToDictionary(y => y.Key, y => y.Count());
我没有亲自尝试过,也没有在VS中编写代码,但我认为这几乎就是您可以做到的。这将为您提供一个字典,其中键是状态,值是该状态的计数


使用名为
SomethingX
的属性定义模型不是很灵活。这意味着您必须在出现新状态时更改模型。将数据保留在字典中可以避免这种情况。

我会选择字典,请尝试以下操作:

var countData = MyDC.Data.Where(y => TheIDs.Contains(y.ID))
    .GroupBy(y => y.Status).ToDictionary(y => y.Key, y => y.Count());
我没有亲自尝试过,也没有在VS中编写代码,但我认为这几乎就是您可以做到的。这将为您提供一个字典,其中键是状态,值是该状态的计数

使用名为
SomethingX
的属性定义模型不是很灵活。这意味着您必须在出现新状态时更改模型。将数据保留在字典中可以避免这种情况