2017-03-29 5 views
0

Ich versuche, eine linke Outer-Join-Abfrage mit Linq auf 2 Tabellen schreiben, aber NULL-Referenz Ausnahme während der Laufzeit, wenn Nullwerte in der rechten Tabelle sind.Linke Outer-Join-Laufzeitfehler mit LINQ

Für alle MatchID-Werte wie in der Tabelle tbl_Match Tabelle tbl_UserBets enthält die Tabelle keine Werte für alle.

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 Tabelle Entwurf für tbl_UserBets Tabelle: Wenn also NULL-Wert kommt, ich bin immer meine Zeit Ausnahme

PFB LINQ-Abfrage,

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 Tabelle Design für tbl_Match Tabelle

laufen :

Mit der folgenden Abfrage in SQL bin ich in der Lage, die Ergebnisse richtig zu bekommen, Need t Mach das gleiche mit 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') 

Bitte lassen Sie mich wissen, welche Änderungen ich tun sollte, um das Problem zu beheben. Vielen Dank.

+0

See Msdn verursachen: https : //code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b – jdweng

Antwort

0

versuchen, die in dem Zustand mit dem ersten oder Standard verschmelzenden

ich das Problem bin zu raten, wenn das, wo gibt den ersten oder Standard null wird die Ausnahme als 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

Vielen Dank für die Antwort auf meine Abfrage. Das Problem war, wie ich den Null-Wert mit anderen String-Werten in console.writeline innerhalb der foreach-Schleife, von der ich Null-Pointer-Ausnahme bekam, verkettet habe. Sobald ich die Logik verschoben habe, um zu überprüfen, ob der Wert vor der Schleife null ist. Es hat das Problem gelöst. – Manju

+0

kein Problem, ich werde meine answear vielleicht helfen, etwas anderes mit dem Problem, das ich beschrieben –