2011-01-20 5 views
1

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

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

| 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 
       }; 

Чтобы найти что-

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

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

+0

Что делает 'group результат new {}' do? Это новое для меня. –

ответ

5

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

+0

Спасибо, это была возможность, я просто не знал, что говорят эксперты. Я ценю ваш быстрый ответ – Tom

+1

+1: Я собирался ответить тем же, но вы были быстрее меня. – rsenna

+0

Позор, что SQL Server не может его агрегировать, пока он все равно извлекает данные. Если я не забываю что-то ослепительно очевидное и существует такой способ ... –

Смежные вопросы