2011-11-19 3 views
1

플레이어, 게임, 유형별로 다른 테이블과 연결된 필드가있는 "작업"테이블이 있습니다.Linq - 목록에있는 행 선택

List<Player> playersForStats 
    List<Game> gamesForStats 

지금 내가 (필드) 플레이어 목록 gamesForStats에있는 목록 playersForStats 및 (필드) 게임에 작업에서 행을 선택합니다 : 내 C# 코드로도 두 개의 목록을 가지고있다. 어떻게 linq를 사용하여 만들 수 있습니까? 내부 조인이나 다른 것을 사용해야합니까?

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

c.PlayersList 그리고 c.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에서 oAction.Game이 game.GameName과 등가 인 경우 gameForStats에 참여하십시오.) ToList(); 내가 먼저 선을 변경할 수 있습니다. 목록 결과 = (actions.asEnumerable에서 oAction() ..... 에서의 행동이 내 SQLSERVER 테이블입니다 때문에 대화의 becuse (내 프로그램 속도가 느려질 수 서버에서 데이터 보내기) contains() 메서드를 사용하여 솔루션을 사용하고 SqlServer에서 쿼리를 작성하는 것이 더 빠릅니다. – Sparkzi

+0

가장 빠른 솔루션은 DB에 뷰를 만들고 웹 서비스 (예 : –

0

내가 행동으로 명명 액션 목록을 가정 거라고는 : 사실

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

은 playersForStats 경우 검색 할 필요 gamesForStats 관련 행동의 플레이어와 게임이 포함되어 있습니다.

+0

)를 통해 서버에서 직접 호출하는 것입니다. 내 코드와 잘 작동합니다. – Sparkzi

+0

@ Sparkzi이 기능이 작동하는 경우 질문의 왼쪽에있는 tik을 녹색으로 토글하여 답변으로 표시합니다. –