2016-05-20 2 views
0

У меня есть два списка с 1 колонками Валюта и Total какСоюз 2 списка по GroupBy

list1 
     Currency Total 
     USD  10   
     EUR  25 

list2 
     Currency Total 
     USD  10   
     EUR  25 
     INR  55 

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

ListSummary 

     Currency Total 
     USD  20 
     EUR  50 
     INR  55 

следующий код Linq, порождающий 2 списка для меня

  var license_sum = licenses.GroupBy(x => x.Currency, 
         (key, values) => new { 
          Currency = key, 
          Total = values.Sum(x => x.FeesCustom == 0 ? x.FeesNormal : x.FeesCustom) 
         }); 
     var trans_sum = translations.GroupBy(x => x.Currency, 
         (key, values) => new { 
          Currency = key, 
          Total = values.Sum(x => x.FeesCustom == 0 ? x.FeesNormal : x.FeesCustom) 
         }); 

Из этих 2 я планирую Ф.О. г Список

ответ

1

Вы можете использовать Concat LINQ расширение для согласования обоих списков, а затем использовать GroupBy для группировки по курсовой ..

var overool_sum = license_sum.Concat(trans_sum) 
          .GroupBy(x => x.Currency) 
          .Select(x=> new 
          { 
          Currency = x.Key, 
          Total = x.Sum(x => x.Total) 
          }) 
          .ToList(); 
+0

Я получаю исключение null после попытки перехода к результату. Любая известная причина этого? Я проверяю, что мои входные списки имеют значение null или нет, прежде чем делать это concat. –

+0

У вас есть какой-либо из этих списков (licence_sum, trans_sum) null? –

1
var overool_sum = licenses.Concat(translations).GroupBy(x => x.Currency, 
         (key, values) => new { 
          Currency = key, 
          Total = values.Sum(x => x.FeesCustom == 0 ? x.FeesNormal : x.FeesCustom) 
         }); 

overool_sum при условии, что они одни и те же типы - в противном случае просто .Select общий тип первого :-)

+0

Я получаю исключение null после попытки перейти к результату. Любая известная причина этого? Я проверяю, что мои входные списки имеют значение null или нет, прежде чем делать это concat –

+0

Это просто догадка, не зная ваших типов ... но: Может ли .FeesCustom или .FeesNormal быть нулевым? Или списки после этого становятся пустыми? (Оба .Concat и .GroupBy отложены - попробуйте .ToList() в конце) – Goblin

1

Это должно работать для вас:

class MyClass { 
     public string Currency { get; set; } 
     public decimal Total { get; set; } 
    } 

    void Main() { 
     var list1 = new List<MyClass>(){ 
       new MyClass{ Currency = "USD" , Total = 10}, 
       new MyClass{ Currency = "EUR" , Total = 25},   
      }; 

     var list2 = new List<MyClass>(){ 
       new MyClass{ Currency = "USD" , Total = 10}, 
       new MyClass{ Currency = "EUR" , Total = 25},   
       new MyClass{ Currency = "INR" , Total = 55},   
      }; 

     var list3 = list1.Concat(list2); 

     var list4 = list3.GroupBy(x => x.Currency).Select(y => new MyClass { 
      Currency = y.Key, 
      Total = y.Sum(z => z.Total) 
     }); 
     Console.WriteLine(list4); 

    } 
+0

Я получаю исключение null после попытки перехода к результату. Любая известная причина этого? Я проверяю, что мои входные списки имеют значение null или нет, прежде чем делать это concat. –

+0

Если вы скопируете код вставки ниже в linqpad, вы увидите, что он работает правильно. –

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