группировка и подсчет в linq-to-sql - PullRequest
0 голосов
/ 27 января 2012

У меня есть следующий запрос, который получает список идентификаторов, и я хочу сделать подсчет. Существует также объектная модель 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, произойдет ли сбой этого кода или будет 0 для CountStatusN? Это лучший способ сделать то, что я хочу?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 27 января 2012

Я бы вместо словаря попробовал бы что-то вроде этого:

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

Я сам не пробовал и не писал код в VS, но я думаю, что это почти так, как выможет сделать это.Это даст вам словарь, в котором ключ - это статус, а значение - это счетчик этого статуса.

Определение модели со свойствами с именем SomethingX не очень гибко.Это означает, что вы должны изменить модель, когда появится новый статус.Хранение данных в словаре спасет вас от этого.

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

Count() всегда будет возвращать целое число, равное 0, если нет элементов с данным статусом. Поэтому CountStatusN также всегда будет целым числом.

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