2016-08-11 1 views
1

Я пишу запрос linq, чтобы получить некоторые данные из таблицы. Я хочу получить счет docStatus с "notVerified" за каждые clientID.Группа Linq по запросу со счетом и другими полями в mvc4

Моя структура таблицы выглядит следующим образом

ID  clientId clientName  empID  docStatus 
1  IN1001 Infy   100  Verified 
2  IN1001 Infy   101  notVerified 
3  IN1001 Infy   102  notVerified 

После запроса я хочу данные в форму ниже

clientID clientName Count 
IN1001  Infy   2 

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

var noofRecords = (from c in db.ts_upld_doc 
        group c by c.upld_docid into grouping 
        select new 
        { 
         key = grouping.Key, 
         Count = grouping.Count() 
        }); 
return noofRecords.Count(); 

заблаговременно.

+0

Что 'upld_docid'? Ваш запрос не соответствует предоставленной таблице, что делает его запутанным. – user3185569

+0

ID - upld_docid в приведенной выше таблице. Приносим извинения за неудобства. –

ответ

1

Вероятно, вы будете, что место предложение where перед группировкой (почему группировать эти элементы, которые вы отфильтровываете). Затем, если вы хотите получить результат, как вы указали, проще всего будет группировать как , так и clientName.

Также в вашем предыдущем запросе вы группируетесь по полю upld_docid (ID) - это уникальное поле в ваших данных, то есть все ваши группы имеют размер 1 - как если бы вы не группировались.

Ниже запрос, должен делать то, что вы хотите:

var noofRecords = (from c in db.ts_upld_doc 
        where c.docStatus == "notVerified" 
        group c by new { c.clientID, c.clientName } into grouping 
        select new 
        { 
         ClientId = grouping.Key.clientID, 
         ClientName = grouping.Key.clientName, 
         Count = grouping.Count() 
        }).ToList(); 
+0

Супер работает отлично. Спасибо –

+0

@NIRANJANG - Это сработало для вас? –

+0

Да, он отлично работает для меня. я должен отправить noofRecords из datalayer в контроллер, как показано ниже, в правом публичном списке getdetails {над запросом и возвратить noofRecords}, если я не ошибаюсь? –

0

Вы можете разместить где в нескольких местах, один из вариантов:

var noofRecords = (from c in db.ts_upld_doc 
        where c.docStatus == "notVerified" 
        group c by c.upld_docid into grouping 
        select new 
        { 
         key = grouping.Key, 
         Count = grouping.Count() 
        }); 

return noofRecords.Count(); 

Be Aware !! Вы возвращенное количество записей, а не граф Имущества вы установите grouping.Count()

Чтобы получить ожидаемые результаты, вы должны сделать следующее:

var noofRecords = (from c in db.ts_upld_doc 
        where c.docStatus == "notVerified" 
        group c by new { c.clientId , c.clientName } into grouping 
        select new 
        { 
         ClientId = grouping.Key.clientId, 
         ClientName = grouping.Key.clientName, 
         Count = grouping.Count() 
        }); 

return noofRecords.ToList(); 
+0

Запрос работает нормально, но подход noofRecords.Count(); не является правильным. Я добавил еще одну строку в db, и я получил результат ниже [0] {key = IN1001, count = 2}. [1] {key = IN1001, count = 1} –

+0

Теперь я хочу получить результат как clientID clientName Count для каждого clientid –

+0

@NIRANJANG Именно это я и сказал в разделе Be Aware. Я просто ответил на вопрос о том, где я должен поставить предложение 'where'. Проверьте отредактированный ответ. – user3185569

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