2011-11-19 49 views
1

我得到了表格「Actions」,其中包含像Player,Game,Type - ale等字段與其他表格相連的字段。我在我的C#代碼也是兩個列表:Linq - 選擇列表上的行

List<Player> playersForStats 
    List<Game> gamesForStats 

現在我想從操作這(場)玩家都在名單playersForStats和(場)比賽中,以列表gamesForStats選擇行。我怎樣才能使用LINQ?我必須使用內部連接或其他東西?

var oActions = .. 
var oData = oActions.Where(c=> c.Players.TrueForAll(p => playersForStats.Contains(p)) && gamesForStats.Contains(c.Game)); 

假設c.PlayersListc.Game是場:如果你的對象有適當的equals方法

回答

1

這樣的事情應該工作。

0

事情是這樣的:

class Program 
{ 
    static void Main(string[] args) 
    { 
     List<Action> actions = new List<Action>(); 
     List<Game> gamesForStats = new List<Game>(); 
     List<Player> playersForStats = new List<Player>(); 

     List<Action> result = (from oAction in actions 
           join game in gamesForStats on oAction.Game equals game.GameName 
           join player in playersForStats on oAction.Player equals player.PlayerName 
           select oAction).ToList(); 

     Console.ReadLine(); 
    } 
} 

public class Player 
{ 
    public string PlayerName { get; set; } 
} 

public class Game 
{ 
    public string GameName { get; set; } 
} 

public class Action 
{ 
    public string Player { get; set; } 
    public string Game { get; set; } 
    public string Type { get; set; } 
} 
+0

謝謝!這個解決方案工作得很好,但我還有一個問題。 如果我想要使用這個解決方案: 列表結果=(來自oAction的行動 加入遊戲在gamesForStats on oAction.Game等於game.GameName ......)ToList(); 我得第一行更改爲: 列表結果=(從oAction在actions.asEnumerable()..... 因爲行動是我的SqlServer表 它可以減緩我的程序(becuse談話並從服務器發送數據)? 也許更快是使用包含()方法的解決方案,並在SqlServer上進行查詢? – Sparkzi

+0

最快的解決方案是在您的數據庫中創建一個視圖,並通過Web服務從您的服務器直接調用它,例如 –

0

我會假設命名爲動作在動作列表:

actions.Where(x=>playersForStats.Contains(x.Player) && gamesForStats.Contains(x=>x.Game)); 

其實只需要如果playersForStats搜索和gamesForStats包含有關行動的玩家和遊戲。

+0

謝謝!它與我的代碼很好:) – Sparkzi

+0

@Sparkzi如果這適用於您,請將問題左側的tik切換爲綠色,將其標記爲答案。 –