2015-01-28 2 views
0

Как создать LINQ запрос для достижения следующего:LINQ запрос для группы, сортировки и SUMPRODUCT

  1. Группа элементов исходных данных по Название собственности
  2. Сортировка результате Groups по Значение собственности, самая большая группа сверху
  3. Выберите элементы группы в новый класс: MyNewClass (описано на рисунке ниже, с правой стороны)
  4. Вычислить SumProduct из Значение х зрелости для каждого Group и установить результат MaturitySumProduct собственности в MyNewClass.

Ниже приведен пример исходных данных и желаемой структуры результатов из запроса LINQ.

enter image description here

Я начал с группировкой в ​​запросе LINQ, но получил stucked с остальными:

Dim query = From i In SourceDataItems 
      Group By Name = i.Name 
      Into MyNewClass = Group 

Как завершить запрос, чтобы получить желаемый результат?

+0

Что такое 'SourceDataItems'? –

+0

Это исходные данные, как IEnumerable пользовательского класса. – Nuts

ответ

2

Предположив соответствующий конструктор в MyNewClass:

Dim query = From i In SourceDataItems 
      Group By Name = i.Name Into NameGroup = Group 
      Let SumArea = NameGroup.Sum(Function(i) i.Area) 
      Let SumValue = NameGroup.Sum(Function(i) i.Value) 
      Let SumMaturity = NameGroup.Sum(Function(i) i.Maturity) 
      Let MaturitySumProduct = NameGroup.Sum(Function(i) i.Value * i.Maturity) 
      Order By SumValue Descending 
      Select New MyNewClass(Name, SumArea, SumValue, MaturitySumProduct) 
+1

Работает иначе, но калькулятор SumProduct ошибочен. Мне нужно умножение на уровне элемента исходных данных, например, для Item1 мне нужно: 2334 x 23.2 + 2331 x 45.2 = 159 510. Теперь он вычисляет его как (2334 + 2331) * (23.2 + 45.2) = 319 086 – Nuts

+0

@ user2143213 : Я отредактировал его. –

+1

Если вы сделаете еще одно редактирование, я могу принять ответ: i.Value + i.Maturity -> i.Value * i.Maturity – Nuts

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