2017-01-19 4 views
1

Я смотрел другие темы здесь, чтобы узнать, как делать GroupBy в linq. Я следую синтаксису EXACT, который работал для других, но он не работает.IGrouping не содержит определения для

Вот запрос:

var results = from p in pending 
       group p by p.ContactID into g 
       let amount = g.Sum(s => s.Amount) 
       select new PaymentItemModel 
       { 
        ContactID = g.ContactID, // <--- Error here 
        Amount = amount 
       }; 

pending является List<T>, который содержит, среди других столбцов, ContactID и Amount, но это только два я заботиться о для этого запроса.

Проблема в том, что внутри select newg. не даст мне ни одной из колонок в исходном списке, pending. И когда я пытаюсь, я получаю:

IGrouping <int, LeadPurchases> не содержит определения для ContactID, а метод расширения бла-бла-бла ...

Это SQL Я пытаюсь подражать:

SELECT 
    lp.PurchasedFromContactID, 
    SUM (lp.Amount) 
FROM 
    LeadPurchases lp 
GROUP BY 
    lp.PurchasedFromContactID 
+0

Вы будете хотеть 'g.Key.ContactID' – Rob

+0

Это меня: int не содержит определения для ContactID –

+3

Извините - я не думаю прямо. Это должно быть просто 'ContactID = g.Key', так как вы только группируете одно значение – Rob

ответ

4

вы группирование на основе ContactID, поэтому она должна быть ключом к результату, поэтому вы должны использовать вместо g.Key для g.ContactID; Что означает, что запрос должен быть как следующее:

from p in pending 
       group p by p.ContactID into g 
       let amount = g.Sum(s => s.Amount) 
       select new PaymentItemModel 
       { 
        ContactID = g.Key, 
        Amount = amount 
       }; 

обновление:

Если вы хотите выполнить группировку на основе более чем одного столбца, то условие GroupBy будет выглядеть следующим образом:

group p by new 
{ 
    p.ContactID, 
    p.Field2, 
    p.Field3 
}into g 
select new PaymentItemModel() 
{ 
    ContactID = g.Key.ContactID, 
    anotherField = g.Key.Field2, 
    nextField = g.Key.Field3  
}; 
+0

ok, это выглядит многообещающим! Я проведу несколько тестов и отчитаюсь. Спасибо! –

+0

@CaseyCrookston: Cool Happy code –

+0

Хорошо, это сработало! Это позволит мне отметить это как ответ через 3 минуты. В то же время, я знаю, что это дополнение к моему OP, но ... что, если бы я хотел группировать больше столбцов? Не могли бы вы добавить свой ответ, чтобы показать, как он будет группироваться еще одной колонкой в ​​дополнение к ContactID? –

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