2

次のクエリを使用して、プレイヤーがプレイしていないすべてのポジションを選択するゲームの linq 結合を作成しようとしています。

var m_player_positions = from pl in tfs.Players
                         join pos in tfs.Positions
                             on new { X = true } equals new { X = (pl.MainPositionID != pos.PositionID) }
                         select new {PlayerName = pl.Forename, Position = pos.Name};

join equals の右側で pl を使用できず、左側で pos を使用できないことに気付きました。この特定の結合を linq で実行する方法はありますか?

4

2 に答える 2

3

あなたは基本的にこれを使用して行うことができますSelectMany

var m_player_positions =
    tfs.Players.SelectMany(
                    pl => tfs.Positions
                             .Where(pos => pl.MainPositionID != pos.PositionID)
                             .Select(pos => new {PlayerName = pl.Forename, Position = pos.Name}));
于 2013-06-18T07:47:49.927 に答える
2

殴られましたが、どうぞ。

  var m_player_positions = from pl in tfs.Players
                         join pos in tfs.Positions
                             on pl.MainPositionID == pos.PositionID
                         select new {PlayerName = pl.Forename, Position = pos.Name};

'equals' の制限は、結合で等値のみが使用されるようにするために選択されました。これは、より高度なロジックを使用するクエリは、リレーショナル ステートメントに確実に変換できないためです。

このドキュメントの 2 番目の段落を検討してください。 http://msdn.microsoft.com/en-us/library/bb311040.aspx

于 2013-06-18T07:37:26.950 に答える