Problem: Ich mag die genaue sql unten in der gewünschten Ausgabe mit linq Syntax (Entity Framework 7)LEFT JOIN, nachdem eine in der Gruppe in Linq Entity-Framework (Kern)
Das Ziel der erzeugen Frage ist, den genauen sql unten zu erzeugen! gewünschte Ausgabe
select a.AppUserId, u.Email, a.FirstName, a.MiddleName, a.LastName, a.IsInternal, a.AspNetUserId, a.PictureLink, a.SignatureLink, a.PhoneNumber, a.Extension, a.FaxNumber, a.MobileNumber, a.Skype, r.Name as 'Role', a.SupervisorId, a.BackUpId, a.HasAutoAssignClaims, a.IsActive
from AppUser a
join AspNetUsers u on a.AspNetUserId = u.Id
left join AspNetUserRoles ur on u.Id = ur.UserId
left join AspNetRoles r on ur.RoleId = r.Id
Ich habe nur genau die gleiche SQL zu bekommen in der Lage, aber mit innerer Joins. Ich kann nicht scheinen, die zwei linken Verbindungen zu bekommen. Der Code hier unten, wie ich die inneren Joins generieren konnte und auch einen fehlgeschlagenen Versuch, die linken Joins zu generieren.
SELECT [a].[AppUserId], [a].[FirstName], [a].[MiddleName], [a].[LastName], [a].[IsInternal], [a].[AspNetUserId], [a].[PictureLink], [a].[SignatureLink], [a].[PhoneNumber], [a].[Extension], [a].[FaxNumber], [a].[MobileNumber], [a].[Skype], [a].[SupervisorId], [a].[BackUpId], [a].[HasAutoAssignClaims], [a].[IsActive]
FROM [AppUser] AS [a]
INNER JOIN [AspNetUsers] AS [b] ON [a].[AspNetUserId] = [b].[Id]
INNER JOIN [AspNetUserRoles] AS [c] ON [b].[Id] = [c].[UserId]
INNER JOIN [AspNetRoles] AS [d] ON [a].[RoleId] = [d].[Id]
Code mit INNER JOIN funktioniert, aber ich will links verbindet ....:
var query = (
//INNER JOIN
from a in _dbCtx.AppUser
join b in _dbCtx.Users
on a.AspNetUserId equals b.Id
////LEFT JOIN
join c in _dbCtx.UserRoles
on b.Id equals c.UserId
// // //LEFT JOIN (if you wanted right join the easiest way is to flip the order of the tables.
join d in _dbCtx.Roles
on a.RoleId equals d.Id
select new
{
AppUserId = a.AppUserId,
//Email = b.Email,
FirstName = a.FirstName,
MiddleName = a.MiddleName,
LastName = a.LastName,
IsInternal = a.IsInternal,
AspNetUserId = a.AspNetUserId,
PictureLink = a.PictureLink,
SignatureLink = a.SignatureLink,
PhoneNumber = a.PhoneNumber,
Extension = a.Extension,
FaxNumber = a.FaxNumber,
MobileNumber = a.MobileNumber,
Skype = a.Skype,
//Role = d.Name != null ? string.Empty :d.Name ,
SupervisorId = a.SupervisorId,
BackUpId = a.BackUpId,
HasAutoAssignClaims = a.HasAutoAssignClaims,
IsActive = a.IsActive
}).ToList();
Code mit links ... Join die ich einige Konzept funktioniert nicht
was tut fehlt Arbeit ist, dass auf g2.RoleId gleich d.Id in Gruppe3 Linie der g2 ist nicht verfügbar. Also wie würde ich c.RoleId für meine nächste Linksmitgliedschaft verfügbar machen? Grundsätzlich, nachdem Sie etwas gruppiert haben, können Sie es anscheinend nicht mehr verwenden.
var LeftJoin= (
//INNER JOIN
from a in _dbCtx.AppUser
join b in _dbCtx.Users
on a.AspNetUserId equals b.Id
////LEFT JOIN
join c in _dbCtx.UserRoles
on b.Id equals c.UserId into group2
from g2 in group2.DefaultIfEmpty() //makes it left join
join d in _dbCtx.Roles
on g2.RoleId equals d.Id into group3
from g3 in group3.DefaultIfEmpty()
select new
{
AppUserId = a.AppUserId,
Email = b.Email,
FirstName = a.FirstName,
MiddleName = a.MiddleName,
LastName = a.LastName,
IsInternal = a.IsInternal,
AspNetUserId = a.AspNetUserId,
PictureLink = a.PictureLink,
SignatureLink = a.SignatureLink,
PhoneNumber = a.PhoneNumber,
Extension = a.Extension,
FaxNumber = a.FaxNumber,
MobileNumber = a.MobileNumber,
Skype = a.Skype,
Role = g3.Name != null ? string.Empty :g3.Name ,
SupervisorId = a.SupervisorId,
BackUpId = a.BackUpId,
HasAutoAssignClaims = a.HasAutoAssignClaims,
IsActive = a.IsActive
}).ToList();
Sie sollten dies weiter ausführen: 'einige Konzept funktioniert nicht ' –
Ich habe ausgearbeitet, dass g2.RoleId ist nicht mehr verfügbar, wenn ich auf g2.RoleId gleich d.Id in group3. Das Gesamtziel besteht darin, die obige Abfrage mit den linken Joins in welcher Methodik auch immer zu replizieren. – hidden
Was meinst du mit * nicht verfügbar *? Syntaktisch sieht das wie eine korrekte Aussage aus. –