[英]Using multiple LINQ statements with into , for the DefaultIfEmpty() of the left outer join not working
[英]Left Outer Join with Multiple On Statements
我已經花了幾個小時了。 這是我嘗試過的:
List<SoccerTeamsModel> incompleteFootballTeams = (from fbt in db.footballTeams
join fbct in db.footballCustomTeams
on fbt.team_id equals fbct.team_id && fbct.client_id == clientId && fbct.language == selectedLanguage into t
from ct in t.DefaultIfEmpty()
where fbt.league_id == leagueId
orderby fbt.name ascending
select new SoccerTeamsModel
{
TeamId = fbt.team_id,
ClientId = ct.client_id,
etc...
}).ToList();
我嘗試復制的SQL查詢:
SELECT *
FROM [SoccerData].[dbo].[footballTeams] AS fbt
LEFT OUTER JOIN [SoccerData].[dbo].[footballCustomTeams] AS fbct
ON fbt.team_id = fbct.team_id AND fbct.client_id = 104 AND fbct.[language] = 'fr-FR'
WHERE fbt.league_id = 8
ORDER BY fbt.name ASC
令我感到困惑的是,它試圖插入所有多個“ on”子句。 我已經看到了一些示例,但其中不包括左外部聯接。 我似乎無法將兩者放在一起。
我認為該查詢應該提供一些與您的SQL表達式接近的東西。 它與LINQ完全不同,但是我認為SQL的結果是您的目標:
var clientId = 104;
var lang = "fr-FR";
var leagueId = 8;
// Find teams in specifiec league
// Equivalent to this step in SQL: WHERE fbt.league_id = 8
var leagueTeams = footballTeams.Where(fbt => fbt.league_id == leagueId).ToList();
// Find teams that fulfill required conditions
// Equivalent to the On condition in SQL
var teams = footballCustomTeams
.Where(fbct => leagueTeams.Any(fbt => fbct.team_id == fbt.team_id) &&
fbct.client_id == clientId &&
fbct.language == lang)
.Select(fbct => new { TeamId = fbct.team_id, ClientId = fbct.client_id });
與其復制連接,我只是將LINQ查詢分為多個子查詢,每個子查詢縮小了結果范圍。 可能需要稍作調整,因為我無權訪問您的模型,而只是嘗試從樣本中推斷出來。
您不需要使這些多個ON語句。 那是格式不正確的SQL語句。 ON應該僅是要連接的兩個表之間的關系。
將client_id = 104
和[language] = 'fr-FR'
移到WHERE的其他部分,就可以了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.