5

私はLINQについてもう少し理解し、もう少し使用したいと考えているので、ここで少し自己開発作業を行います...

次のようなオブジェクトがあります。

public class Player(){

    public string Name{get;set;}

    public Club currentClub{get;set;}

    public IEnumerable<Club> previousClubs{get;set;}

}

さて、プレーヤーのリストが与えられたので、以前に選択したさまざまなクラブでプレーしたプレーヤーを選択したいと思います.foreachステートメントをネストすることで簡単に実行できますが、Linqで実行したいと思います.. .

私はこれを試しましたが、何も返されません:

var prevClubs = 
    from player in players
    from clubOriginal in player.previousClubs
    from clubSecond in player.previousClubs
    from clubThird in player.previousClubs
    where clubOriginal.ID == 1
    where clubSecond.ID == 2
    where clubThird.ID == 3
    select new HistoryOfPlayer{ 
        firstClub == clubOriginal.Name,
        secondClub == clubSecond.Name,
        thirdClub == clubThird.Name
    }

私が間違っているところに助けはありますか?プレーヤーをループするループ内のクラブをループする foreach ループがあり、クラブ 1、2、および 3 でプレーしたすべてのプレーヤーのコレクションを返すため、データは確実に存在します...

効果的には、HistoryOfPlayer オブジェクトの複数のインスタンスを返す必要があります。すべて同じ 3 つのクラブの名前が含まれています (ID でリンクされている場合)。ちょっと頭に刺さる!!

誰か助けてくれませんか?

4

1 に答える 1

4

あなたはそれをより動的にすることができます

List<int> clubIds = new List<int> { 1, 2, 3};
var prevClubs = from player in players
                where player.previousClubs.Any(m => clubIds.Contains(m.ID))
                select new HistoryOfPlayer {
                   Player = player, 
                   Clubs = player.previousClubs
                                 .Where(m => clubIds.Contains(m.ID))
                                 .Select(c => c.Name) 
                };

彼の発言をsvikした後に編集します:

List<int> clubIds = new List<int> { 1, 2, 3};
var prevClubs = from player in players
                where clubIds.All(id => player.previousClubs
                                              .select(club => club.ID)
                                              .contains(id))
                select new HistoryOfPlayer {
                   Player = player, 
                   Clubs = player.previousClubs
                                 .Where(m => clubIds.Contains(m.ID))
                                 .Select(c => c.Name) 
                };

*これはIDEなしで作成されているため、動作するかどうかは確認していません.

于 2012-04-30T12:43:10.257 に答える