Суммируйте столбец в SQL или C # - PullRequest
1 голос
/ 20 января 2011

У меня есть вопрос к экспертам TSQL или экспертам LINQ C #.У меня есть хранимая процедура, которая объединяет несколько таблиц.В основном название, идентификатор и около 10 столбцов продукта.Хранимая процедура может вернуть много данных (иногда более 90 000 строк).В сохраненной процедуре я фильтрую результаты, чтобы отфильтровать все строки, где все продукты в этой строке = 0. Что мне нужно сделать, это удалить столбцы в C #, где все значения в столбце (product) равны нулю.Это связано с некоторыми бизнес-правилами в моем приложении (запрос клиента).

Приложение может удалять (скрывать) столбцы, отправляя массив имен столбцов в построитель отчетов.Например:

| Имя | ID | Prod1 | Prod2 | Prod3 | Prod4 |

Если я хочу удалить Prod3 и Prod4 из отчета:

List<string> hideColumns = new List<string>();
hideColumns.Add("Prod3");
hideColumns.Add("Prod4");

иЯ бы отправил hideColumns.ToArray () в построитель отчетов, и эти столбцы были бы удалены.

В моем приложении я отправляю все данные, а затем использую следующий LINQ, чтобы найти значения столбцов для возвращаемых данных.

var zeroCols = from result in data
               group result by new { } into C
               select new ProductDataClass
               {
                   Prod1 = C.Sum(x => x.Prod1)
                   Prod2 = C.Sum(x => x.Prod2)
                   ...etc to Prod10
               };

Чтобы найти значение 0

if (zeroCols.Count() > 0)
{
    if (zeroCols.First().Prod1 == 0)
        hideColumns.Add("Prod1");
    ...etc to Prod10
}

Однако моя проблема в том, что LINQ действительно медленный, если отчет возвращает много строк.Кто-нибудь может сделать какие-либо предложения?

1 Ответ

5 голосов
/ 20 января 2011

Было бы быстрее разделить это на два запроса - один для возврата данных, а другой агрегированный запрос для возврата одной строки.Возврат из совокупного запроса может использоваться для определения того, какие столбцы равны 0 и должны быть скрыты.

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