linq-to-sql количество агрегатов на основе списка идентификаторов - PullRequest
1 голос
/ 24 января 2012

Рассмотрим таблицу, которая содержит два поля: FieldID и Position.Postion - это байт, который варьируется от 1 до 4.

Я пишу функцию, которая получает список FieldID и возвращает количество элементов, которые находятся в каждой из позиций в linq-to-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();

У меня проблемы с привязкой счетчика на основе списка Iполучить в качестве параметра.Я подхожу к этому неправильно?Я хочу не запрашивать каждый счет по отдельности в 4 разных запросах, каждый по одному счету;Я ищу, чтобы получить 4 счета в одном чтении.Каковы ваши предложения.Спасибо.

1 Ответ

1 голос
/ 24 января 2012

Почему бы вам сначала не сгруппировать по 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 = pos и val = count(), чтобы легче было выбирать значения для модели по вашему выбору.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...