2013-06-06 7 views
0

У меня есть набор данных, который выглядит следующим образом:Используя LET, чтобы получить группу, чтобы получить общее количество (SUM)?

Name Type Quantity 
A 1 2 
A 2 3 
B 1 3 

, определяемые классом предметов с тремя полями (строка имя, Int Тип, двойное количество).

Это сохраняется в списке < Элементы> Подпись.

Что мне нужно сделать, это получить СУММУ QUANTITY для определенного ИМЯ, но эта логика лежит в гораздо большем запросе LINQ, поэтому я пытаюсь найти способ сделать это с помощью инструкций LET.

Зная, что я ищу общее количество для (Name = Имя_целевого_объект) Я пытался сделать что-то вроде этого:

let items = Summary.Where(y => y.Name == TargetName).GroupBy.(z => z.Name) 

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

TotalQuantity = items.Sum(x => x.Quantity) 

Но это не работает, получить следующее сообщение об ошибке:

ошибка 2 «System.Linq.IGrouping» не содержит определение для «Количество» и не метод расширения «Количество»

Это также случай, когда я делаю x. нет опции для количества в intelisense (это дает мне варианты, как если бы это был список).

Любые идеи? Я предполагаю, что это ошибка newb (я новичок в LINQ). Спасибо,

ответ

2

Если вам нужно только подвести определенное имя, вы просто звоните:

TotalQuantity = Summary.Where(y => y.Name == TargetName) 
         .Sum(x => x.Quantity); 

и сам о использовании GroupBy на этом. Но если вы хотите получить доступ SUM очень часто с разными именами, вы можете подумать, чтобы использовать GroupBy и затем ToDictionary для повышения производительности:

var sumDic = Summary.GroupBy(z => z.Name) 
        .ToDictionary(g => g.Key, 
            g => g.Sum(x => x.Quantity)); 

Так что, если вы хотите получить количество любого Name, просто использовать sumDic:

var result = sumDic[TargetName]; 
Смежные вопросы