2013-08-29 3 views
1

Я хочу, чтобы написать этот простой запрос с Linq:не может Группировать по по нескольким столбцам и граф

select issuercode,securitycode,dataprocessingflag,COUNT(issuercode) as cnt 
from cmr_invhdr 
where ProcessedLike <> 'STMNT ONLY' 
group by issuercode,securitycode,dataprocessingflag 
order by Issuercode 

Я попытался следующий код, но я получаю эту ошибку (DbExpressionBinding требует ввода выражения с коллекцией ResultType . имя параметра: вход):

var lstCMRInvHdrNips = (from r in e.CMR_INVHDR 
         where r.ProcessedLike != "STMNT ONLY" 
         select new { 
             r.IssuerCode, 
             r.SecurityCode, 
             CountofIssuerCode = r.IssuerCode.Count(), 
             r.DataProcessingFlag 
            } 
         ).GroupBy(x => 
             new { 
               x.IssuerCode, 
               x.SecurityCode, 
               x.DataProcessingFlag, 
               x.CountofIssuerCode 
              } 
            ).OrderBy(x => x.Key.IssuerCode).ToList(); 
+0

Вы можете попробовать с переупорядочиванием ваш оператор 'select' (положите колонку' count' в конце) – sarwar026

ответ

2

есть ли смысл рассчитывать issuercode в то время как группировка на этом поле сразу? Как и при сгруппированном по полю, это COUNT всегда будет 1.

Вероятно, вы не должны группировать по issuercode и считать его после GroupBy в отдельном Select заявления:

var result = e.CMR_INVHDR 
       .Where(r => r.ProcessedLike != "STMNT ONLY") 
       .GroupBy(r => new { r.SecurityCode, r.DataProcessingFlag }) 
       .Select(r => new 
       { 
        Value = r.Key, 
        IssuerCodesCount = r.GroupBy(g => g.IssuerCode).Count() 
       }) 
       .ToList(); 
+0

Спасибо, я изменил свой запрос на это (используя ваш), и он сработал, но все же я не могу недооценить и что не так с моим var result = e.CMR_INVHDR . Где (r => r.ProcessedLike! = "STMNT ONLY") .GroupBy (r => new {r.IssuerCode, r.SecurityCode, rD ataProcessingFlag}) .OrderBy (r => r.Key.IssuerCode) . Выбрать (r => new {IssueCode = r.Key.IssuerCode, SecurityCode = r.Key.SecurityCode, DataProcessingFlag = r.Key.DataProcessingFlag, Count = r.Count()}) .ToList(); –

+0

@MinaN ваш запрос запускается без ошибок, но он группируется с помощью 'Эмитента '; это означает, что каждая группа содержит записи только с одним и тем же «Эмитент-код». Вот почему 'COUNT (issuerCode)' приводит к 1 в каждой группе. – horgh

+0

@MinaN сначала вы должны четко указать: нужно ли вам группировать «ЭмитентКод» (и затем заказывать), или, наоборот, вам нужно подсчитывать разные «ЭмитентКод» в группах – horgh