2011-11-16 47 views
0

我有兩個班團隊和PlayerTeams轉換從一個類IGrouping到另一個使用LINQ

public class PlayerTeams 
{ 
    public int ID { get; set; } 
    public string PlayerName { get; set; } 
    public string PlayerCountry { get; set; } 
    public bool IsActive { get; set; } 

    public string PlayerTeam { get; set; } 
} 

public class Players 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public string Country { get; set; } 
    public bool? Status { get; set; } 
} 

我有一個由PlayerTeam這樣分組的PlayerTeams列表。 List<IGrouping<string, PlayerTeams>>

var groupedPlayers = teams 
      .OrderBy(x => x.PlayerName) 
      .GroupBy(x => x.PlayerTeam) 
      .ToList(); 

它,但我希望它是List<IGrouping<string, Players>>類型的,因爲我不希望在每個行冗餘的關鍵信息。

我該怎麼做到這一點?我只能想到上的.ConvertAll()這樣的東西。我也無法做到。

有沒有一種有效的方法來做到這一點?

+1

您的'PlayerTeams'類對我來說看起來很奇怪 - 是不是隻是一個'Player'和團隊名稱的組合?爲什麼你有單獨的屬性? –

+0

@JonSkeet:我正在修改已經構建的應用程序。這是問題的抽象,我確實擁有不同的道具名稱。一個是Linq2SQL類,另一個是之前創建的映射器類。 – naveen

+0

好的 - 當你問這個問題時,值得一提的是那種事情;如果有任何看起來不尋常的東西,最好解釋一下。此外,你是否*有*使用現有的分組,或者你是否可以改變分組開始的代碼? –

回答

1

如果你可以改變的分組,我只是用:

var groupedPlayers = teams 
      .OrderBy(x => x.PlayerName) 
      .GroupBy(x => x.PlayerTeam, Players.FromPlayerTeam) 
      .ToList(); 

Players.FromPlayerTeamPlayers一個靜態方法,這需要PlayerTeam,並返回一個Players

此外,我建議使用的ToLookup代替GroupBy - 一個Lookup正是你想要的這裏,不與ToList電話打擾。

+0

好的。我會嘗試查找。同樣的方法適用於查找轉換數據? – naveen

+0

@naveen:是的 - 你可以指定一個鍵的投影,一個用於元素。 –

+0

明白了。查找對此很快。 (This)[http://msmvps.com/blogs/jon_skeet/archive/2010/12/31/reimplementing-linq-to-objects-part-18-tolookup.aspx]也幫助了我。雙倍感謝。 – naveen

0

這不是testet,只是一個想法。

如果你有麻煩您的LINQ語句,它期待的IGrouping類型,轉換成字符串列表,那麼你可能需要之前選擇它。

var groupedPlayers = new List<string>(); 
groupedPlayers = teams 
     .OrderBy(x => x.PlayerName) 
     .GroupBy(x => x.PlayerTeam, Players.FromPlayerTeam) 
     .Select(x => x.Key) // << added select 
     .ToList(); 
相關問題