LEFT JOIN dans LINQ to entities?
Je suis en train de sortir de LINQ to entities.
J'ai un problème avec les éléments suivants:
Je le veux pour ce faire:
SELECT
T_Benutzer.BE_User
,T_Benutzer_Benutzergruppen.BEBG_BE
FROM T_Benutzer
LEFT JOIN T_Benutzer_Benutzergruppen
ON T_Benutzer_Benutzergruppen.BEBG_BE = T_Benutzer.BE_ID
la chose la plus proche je suis arrivé à ceci:
var lol = (
from u in Repo.T_Benutzer
//where u.BE_ID == 1
from o in Repo.T_Benutzer_Benutzergruppen.DefaultIfEmpty()
//on u.BE_ID equals o.BEBG_BE
where (u.BE_ID == o.BEBG_BE || o.BEBG_BE == null)
//join bg in Repo.T_Benutzergruppen.DefaultIfEmpty()
// on o.BEBG_BG equals bg.ID
//where bg.ID == 899
orderby
u.BE_Name ascending
//, bg.Name descending
//select u
select new
{
u.BE_User
,o.BEBG_BG
//, bg.Name
}
).ToList();
Mais cela génère les mêmes résultats qu'une jointure interne, et non pas une jointure gauche.
En outre, il crée ce fou complètement SQL:
SELECT
[Extent1].[BE_ID] AS [BE_ID]
,[Extent1].[BE_User] AS [BE_User]
,[Join1].[BEBG_BG] AS [BEBG_BG]
FROM [dbo].[T_Benutzer] AS [Extent1]
CROSS JOIN
(
SELECT
[Extent2].[BEBG_BE] AS [BEBG_BE]
,[Extent2].[BEBG_BG] AS [BEBG_BG]
FROM ( SELECT 1 AS X ) AS [SingleRowTable1]
LEFT OUTER JOIN [dbo].[T_Benutzer_Benutzergruppen] AS [Extent2]
ON 1 = 1
) AS [Join1]
WHERE [Extent1].[BE_ID] = [Join1].[BEBG_BE]
OR [Join1].[BEBG_BE] IS NULL
ORDER BY [Extent1].[BE_Name] ASC
Comment puis-je faire un left join dans LINQ-2-entités dans une voie où
une autre personne peut encore comprendre ce qui est fait dans ce code ?
et plus de préférence là où le SQL généré ressemble:
SELECT
T_Benutzer.BE_User
,T_Benutzer_Benutzergruppen.BEBG_BE
FROM T_Benutzer
LEFT JOIN T_Benutzer_Benutzergruppen
ON T_Benutzer_Benutzergruppen.BEBG_BE = T_Benutzer.BE_ID
- Double - stackoverflow.com/questions/3404975/left-outer-join-in-linq
- Nope, rejoignez donne toujours une jointure interne, et de partir sans une condition est une croix-jointure, la réponse sélectionnée est, en dépit de ses nombreux upvotes, inadapté et insuffisant.
- Related post - Linq rejoindre iquery, comment utiliser defaultifempty
- Double Possible de LEFT OUTER JOIN dans LINQ
Vous devez vous connecter pour publier un commentaire.
Ah, a obtenu myselfs.
Les quirks and quarks de LINQ-2-entités.
Cela ressemble plus compréhensible:
Supprimer la
.DefaultIfEmpty()
, et vous obtenez une jointure interne.C'était ce que je cherchais.
Vous pouvez lire un article que j'avais écrit pour les jointures dans les requêtes LINQ ici
Ce qui suit est l'équivalent de l'aide des méthodes d'extension:
GroupJoin
etSelectMany
couples vous pouvez avoir une belle ,bien que longue, la solution 🙂Peut-être que je viens plus tard pour répondre, mais maintenant je suis face à ce... si aide il y a encore une solution (la façon dont je l'ai résolu).
En passant, j'ai essayé d'utiliser l'Stefan Steiger code qui permet aussi mais c'est plus lent que l'enfer.
Simple est d'usage de Laisser un mot clé. Cela fonctionne pour moi.
C'est une simulation de Jointure Gauche. Si chaque élément de B tableau correspond pas à Un élément , BItem retourner la valeur null
Vous pouvez l'utiliser non seulement dans des entités, mais aussi stocker de la procédure ou autre source de données: