2017-05-10 22 views
1

我有看起來像這樣的例子列表:C#組列表,並把統計到列表變量

Id = 1, Name = Microsoft, Country = USA, Match = null 
Id = 2, Name = Google, Country = USA, Match = null 
Id = 1, Name = Microsoft, Country = USA, Match = null 

現在我想通過我不喜歡這個名字組名單:

var List = result.GroupBy(x => x.Name).ToList(); 

我的目標是將重複的數量安全地轉換爲Match。 因此,列表看起來像這樣:

Id = 1, Name = Microsoft, Country = USA, Match = 2 
Id = 2, Name = Google, Country = USA, Match = 1 

在此先感謝!

回答

7

我會根據所有三個屬性進行分組,因此它們將對組中的所有項目具有相同的值。這將簡化構建聚合實體:

var List = result.GroupBy(x => new { x.Name, x.Id, x.Country }) 
      .Select(g => new YourType { 
       Id = g.Key.Id, 
       Name = g.Key.Name, 
       Country = g.Key.Country, 
       Match = g.Count() 
      }) 
      .ToList(); 

如果微軟在其他國家(不僅是美國)和你想重複的只是公司名稱數量(無論是位於美國或沒有),那麼您應該從密鑰和聚合實體中刪除Country

+1

謝謝,這樣做! – Anokrize

+0

如果我只想按姓名分組,但不想按國家分組,但仍然想將國家列入名單中,我該怎麼做? – Anokrize

+1

@Anokrize那麼你應該定義你想包含哪個國家。因爲會有幾個實體名稱相同,但國家不同 –