linq到sql基于ID列表的聚合计数

本文关键字:列表 sql 基于 ID linq | 更新日期: 2023-09-27 18:21:22

考虑一个包含两个字段的表:FieldID和Position。Postion是一个范围从1到4的字节。

我正在编写一个函数,它接收FieldID的列表,并将linq中每个Positions中的项计数返回给sql。包含结果的对象有4个字段,其中包含每个计数。

这就是我所拥有的:

public MyObjectModel GetCount(List<int>TheList)
{
   using (DC MyDC = new DC)
   {
     var Result = from t in MyDC.Table
                   where TheList.Select(i => i).Contains(t.FieldID)
                   select new MyObjectModel()
                   {
                      CountP1 = (from t in MyDC.Table
                                 where t.Position = 1
                                 where t.FieldID = ...).Count();

我很难根据我收到的参数列表进行计数。我是不是走错路了?我希望避免在4个不同的查询中单独查询每个计数,每个查询对应一个计数;我想在一次阅读中得到4个计数。你有什么建议。谢谢

linq到sql基于ID列表的聚合计数

为什么不先按Position分组,然后在select中返回每组的计数?

类似于:

var list = MyDC.Table
    .Where( your filter )
    .GroupBy( item => item.Position )
    .Select( g => new { pos = g.Key, count = g.Count() )
    .ToList();
// list contains items of type ( pos : int, count : int ) where pos is your Position    

您甚至可以将其转换为具有key = posval = count()的字典,以便更容易地为您选择的模型选择值。