2017-05-05 3 views
0

데이터베이스, 역할 및 플레이어 데이터베이스에 세 개의 테이블이 있습니다. 게임과 역할 사이에는 역할과 플레이어간에 많은 관계가 있습니다. 나는 또한 게임과 플레이어 사이에 일대일 관계가 있습니다. Entity Framework를 사용하여 테이블을 매핑했습니다. 내가 얻으려고하는 것은 모든 player를 특정 gameID와 roleID 아래에 두는 것입니다.linq를 사용하여 여러 다 대다 관계 쿼리 #

public IList<Game> GetGamesRolePlayer(int? gameID, int? roleID) 
    { 

     using (DbContextdb = new DbContext()) 
     { 
      db.Configuration.ProxyCreationEnabled = false; 

      if (gameID.HasValue && !roleID.HasValue) 
      { 
       var query1 = (from g in db.Game.Include(r => r.Role) 
           where g.ID == gameID 
           select g).ToList(); 
       _games = query1; 
       return _games; 

      } 
      if (gameID.HasValue && roleID.HasValue) 
      { 
       var query2 = (from g in db.Game 
           from r in db.Role.Include(p => p.Player) 
           where g.ID == game && r.ID == roleID 
           select g).ToList(); 
       _games = query2; 
       return _games; 
      } 
      var query = from game in db.Game select game; 
      _games = query.Include(r => r.Role).ToList(); 
      return _games; 
     } 
    } 
+1

플레이어 또는 게임이 필요합니까? – octavioccl

+0

정수 null이 될 수 없습니다 ... –

+0

나는 선택적 매개 변수 및이 작동하도록 할 수있는 유일한 방법이 있습니다. –

답변

0

플레이어가 필요하지만 코드는 다른 것을 말하고 있습니다. 게임이 필요한 경우 탐색 속성을 사용하여 다음 쿼리를 작성할 수 있습니다.

using (DbContextdb = new DbContext()) 
{ 
     db.Configuration.ProxyCreationEnabled = false; 
     IQueryable<Game> query=db.Game.Include(g=>g.Roles); 

     if (gameID.HasValue) 
      query=query.Where(g=>g.ID==gameID.Value) 

     if (roleID.HasValue) 
      query=query.Include(g=>g.Roles.Select(r=>r.Players)) 
         .Where(g=>g.Roles.Any(r=>r.ID==roleID.Value)) 

     return query.ToList(); 
}