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

У меня есть запрос linq-to-sql, который я использую, чтобы заполнить объект, имеющий свойства ints в качестве свойств и чья функция должна хранить счетчики.

Запрос выглядит так (пока)

var TheQuery = from.....
               where ....
               in thefilteredresults
               select new MyModel()
               {
                   Total = thefilteredresults.Count(),

                   TotalTime = (from x in thefilteredresults
                                where x.Outcome == 4).Sum(t => t)
               }.Single();

У меня возникли проблемы с фильтрацией, а затем подсчетом на основе отфильтрованных результатов первоначальных предложений where.Что мне нужно изменить?

Спасибо.

Ответы [ 2 ]

5 голосов
/ 09 февраля 2012

Вы можете взломать это вместе:

(from x in table
where filter(x)
group x by 0 into g
select new { Count = (int?)g.Count() ?? 0, Sum = (int?)g.Sum(x => x.Value) ?? 0 }).Single()

SQL Server оптимизирует ненужную группировку. Вероятно, лучше всего сделать документ, почему вы написали это так.

Редактировать: я включил странно выглядящий приведение к int ?. Причина этого заключается в том, чтобы сказать Linq SQL, чтобы он предполагал, что значение имеет значение NULL, и использовал вызов функции COALELCE для преобразования NULL в 0. Это и есть хак, который также следует задокументировать.

1 голос
/ 09 февраля 2012

Поскольку вы действительно ищете только один результат, возможно, это самый простой подход:

var filteredResults = from ....
                      where ....
                      select ....;
var myModel = new MyModel{ Total = filteredResults.Count(), ... };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...