2017-03-29 1 views
0

왼쪽 테이블에 2 개의 테이블에 대한 Linq 외부 조인 쿼리를 작성하려고하지만 런타임에 NULL 테이블에 null 값이있는 경우 NULL 참조 예외가 발생합니다.왼쪽 외부 조인 런타임 오류가

tbl_Match 테이블의 모든 MatchID 값에 대해 tbl_UserBets 테이블에는 all 값이 없습니다. tbl_UserBets 테이블

Create Table tbl_Match(
MatchID int primary key Identity, 
TournamentID int Foreign key references tbl_Tournament(TournamentID), 
Team1 int Foreign key references tbl_TournamentTeams(TeamID), 
Team2 int Foreign key references tbl_TournamentTeams(TeamID), 
StartTime DateTime not null, 
MatchBetAmount int not null 
); 

SQL 테이블 디자인 : NULL 값이 나오면 따라서, 나는 tbl_Match 테이블에 대한

string userID = "dfa3c0e7-2aa3-42ee-a7d3-803db902dc56"; 
var res2 = dbEntity.tbl_Match.Select(m => new 
      { 
       MatchID = m.MatchID, 
       Team1 = m.Team1, 
       Team2 = m.Team2, 
       UserForTeam1 = dbEntity.tbl_UserBets.Where(b => b.UserForTeam1 == userID).FirstOrDefault(b => b.MatchID == m.MatchID), 
       UserForTeam2 = dbEntity.tbl_UserBets.Where(b => b.UserForTeam2 == userID).FirstOrDefault(b => b.MatchID == m.MatchID) 
      }); 

      foreach (var item in res2) 
      { 
       Console.WriteLine(item.MatchID + " " + item.Team1 + " vs " + item.Team2 + " " + item.UserForTeam1 == null ? " NA " : item.UserForTeam1.UserForTeam1); 
      } 

SQL 테이블 디자인, 시간 예외

PFB 내 LINQ 쿼리를 실행는군요 :

Create Table tbl_UserBets(
UserBetSlNo int primary key identity, 
TournamentID int Foreign key references tbl_Tournament(TournamentID), 
MatchID int Foreign key references tbl_Match(MatchID), 
UserForTeam1 nvarchar(128) Foreign key references AspNetUsers(Id), 
UserForTeam2 nvarchar(128) Foreign key references AspNetUsers(Id), 
UserForNoBets nvarchar(128) Foreign key references AspNetUsers(Id) 
); 

아래의 SQL 쿼리를 사용하면 결과를 올바르게 얻을 수 있습니다. o LINQ와 동일하게 수행하십시오.

select DISTINCT(tbl_Match.MatchID),tbl_Match.Team1,tbl_Match.Team2,tbl_Match.StartTime,tbl_Match.MatchBetAmount,tbl_UserBets.UserForTeam1,tbl_UserBets.UserForTeam2,tbl_UserBets.UserForNoBets from tbl_Match left outer join tbl_UserBets on tbl_Match.MatchID = tbl_UserBets.MatchID and (tbl_UserBets.UserForTeam1 = 'dfa3c0e7-2aa3-42ee-a7d3-803db902dc56' or tbl_UserBets.UserForTeam2 = 'dfa3c0e7-2aa3-42ee-a7d3-803db902dc56') 

알려 주시면 문제를 해결하기 위해 어떤 조치를 취해야합니까? 감사.

+0

참조 MSDN으로 예외가 발생할 때이 문제를 추측하고있어

가 첫 번째 또는 기본으로 WHERE 조건을 병합하려고 : HTTPS : //code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b – jdweng

답변

0

반환 첫 번째 또는 기본 널 (null) 곳이 stated by msdn doc

var res2 = dbEntity.tbl_Match.Select(m => new 
      { 
       MatchID = m.MatchID, 
       Team1 = m.Team1, 
       Team2 = m.Team2, 
       UserForTeam1 = dbEntity.tbl_UserBets.FirstOrDefault(b => b.UserForTeam1 == userID && b.MatchID == m.MatchID), 
       UserForTeam2 = dbEntity.tbl_UserBets.FirstOrDefault(b => b.UserForTeam2 == userID && b.MatchID == m.MatchID) 
      }); 
+0

내 쿼리에 회신 해 주셔서 감사합니다. 문제는 null 값을 foreach 루프 내에서 console.writeline의 다른 문자열 값과 연결하는 방법이었습니다. bcoz 중 null 포인터 예외가 발생했습니다. 루프 전에 값이 null인지 확인하기 위해 논리를 옮겼습니다. 그것은 그 문제를 해결했습니다. – Manju

+0

문제 없음, 내 답변을 남겨두면 어쩌면 내가 설명한 문제로 some1을 도울 수 있습니다. –