it-swarm.com.de

Lambda-Ausdruck verknüpft mehrere Tabellen mit der select- und where-Klausel

Ich habe drei Tabellen mit vielen zu vielen Beziehungen. Ich habe mich der Tabelle mit drei Tabellen angeschlossen und den gewünschten Wert ausgewählt. Jetzt muss ich jedoch eine Zeile aus dem Abfrageergebnis auswählen, wobei dies meine drei Tabellen sind, indem ich die ID angebe 

Und dies ist die Abfrage mit LINQ Lambda-Ausdruck:

DataBaseContext db = new DataBaseContext();

public ActionResult Index()
{

    var UserInRole = db.UserProfiles.
        Join(db.UsersInRoles, u => u.UserId, uir => uir.UserId,
        (u, uir) => new { u, uir }).
        Join(db.Roles, r => r.uir.RoleId, ro => ro.RoleId, (r, ro) => new { r, ro })
        .Select(m => new AddUserToRole
        {
            UserName = m.r.u.UserName,
            RoleName = m.ro.RoleName
        });

    return View(UserInRole.ToList());
}

das Ergebnis wird so aussehen, wenn sql query verwendet wird

sql Abfrage

select * 
from UserProfile u join webpages_UsersInRoles uir on u.UserId = uir.UserId 
                   join webpages_Roles r on uir.RoleId = r.RoleId 

ergebnis der Abfrage sql

jetzt benutze ich eine andere sql Abfrage, um das Ergebnis der Vorschau zu filtern. sql Abfrage nach wo und setze die Bedingung auf where u.UserId = 1, um mir nur den Benutzer mit der ID 1 so zurückzugeben

select * 
from UserProfile u join webpages_UsersInRoles uir on u.UserId = uir.UserId 
                   join webpages_Roles r on uir.RoleId = r.RoleId 
where u.UserId = 1

und das Ergebnis dieser sql Abfrage

wie kann ich also das Zeichen wo clause zu meinem Lambda-Ausdruck hinzufügen, um das gleiche Ergebnis wie das Ergebnis der Abfrage sql zu erhalten, und danke für jede Hilfe

22
Fadi

Wenn ich Ihre Fragen richtig verstehe, müssen Sie nur die .Where (m => m.r.u.UserId == 1) hinzufügen:

    var UserInRole = db.UserProfiles.
        Join(db.UsersInRoles, u => u.UserId, uir => uir.UserId,
        (u, uir) => new { u, uir }).
        Join(db.Roles, r => r.uir.RoleId, ro => ro.RoleId, (r, ro) => new { r, ro })
        .Where(m => m.r.u.UserId == 1)
        .Select (m => new AddUserToRole
        {
            UserName = m.r.u.UserName,
            RoleName = m.ro.RoleName
        });

Hoffentlich hilft das.

30
Radu Pascal

Ich habe etwas gesucht und diesen Beitrag gefunden. Ich poste diesen Code, der viele-zu-viele-Beziehungen verwaltet, falls jemand ihn benötigt.

    var UserInRole = db.UsersInRoles.Include(u => u.UserProfile).Include(u => u.Roles)
    .Select (m => new 
    {
        UserName = u.UserProfile.UserName,
        RoleName = u.Roles.RoleName
    });
2
Wilfredo