2016-04-13 1 views
1

私は2つのプロパティを持つクラスを持っています。2つのレベルの配列でC#でオーダーする

public class Result{ 
    public User User {get;set}; 
    public List<Game> Games {get; set;} 
} 

私は、各メンバーのために、データベースからデータを取得し、各メンバーは、いくつかのゲームで賭けを取得foreachループを持っています。

var results = new List<Result>(); 
foreach(var member in members){ 
    //Get games from database 
    List<Game> games = gamesFromDatabase; 

    results.Add(new Result{ User = member, Games = games}); 
} 

結果リストはこのようになります。

newResults[0].Member = { Id: 1, Name: David} 
newResuts[0].Game = {GameId: 80, Points:8} 
newResults[0].Member = { Id: 1, Name: Mark} 
newResuts[0].Game = {GameId: 80, Points:7} 

results[0].Member = { Id: 1, Name: David}: 
results[0].Games = [{GameId: 80, Points:8}, {GameId: 81, Points: 3},... 
results[1].Member = { Id: 2, Name: Mark}: 
results[1].Games = [{GameId: 80, Points:7}, {GameId: 81, Points: 8},... 
results[2].Member = { Id: 3, Name: Jake}: 
results[2].Games = [{GameId: 80, Points:5}, {GameId: 81, Points: 10},... 

私はので、私はマークは次のようになりますID = 80の新しいリストをゲームでわずか5ポイントを持っていることを示すことができるその中のすべてのユーザーが、一つだけのゲームを持っている配列をしたいです

受賞者が最高点を持つように注文します

私はこれをC#の 'group by'ステートメントで行うことはできますか?それとも、それは次の配列を作る別のスマートな方法ですか?

ユーザーのpropertiの結果配列とゲームの配列のaグループを使ってグループを作ることはできますか?

答えて

0

最初の結果のメンバーを取ります。

public class Result2 { 
    public User User {get;set}; 
    public Game Game {get; set;} 
} 

var gameId = 80; // Id of game by which you want to filter 
var newResults = results.Select(r => new Result2 { 
    User = r.User, 
    Game = r.Games.OrderByDescending(g => g.Points).FirstOrDefault(g => g.GameId == gameId) 
}.ToList(); 
+0

この場合、新しいリストを取得するには、すべてのゲームを繰り返す必要があります。私はGameIdのグループがそれをやるべきだと思ったが、それは不可能かもしれない。私は、ユーザーが各ゲームのどの場所にいるのかを示したいと言及していませんでした。たとえば、gameId = 80のときにDavidが1位になりますが、次の試合ではDavidが3位に立っていますが、81位と82位の2位のポジションポイントは3位にDavidもあります – user2227138

0

勝者を決定するために全く新しいセットを作成するのはなぜですか?

ただgameIdのポイントで結果を注文し、(必要であればまたは全体の結果)あなたの質問はこれを使用して達成することができますから、私は理解何

int gameId = 80; 
User winner = results.OrderBy(r => 
        r.Games.First(g => g.GameId == gameId).Points 
      ).First().Member;//or stop here and take the ordered results 
       //could also be a projection of entire result or user and points 
関連する問題