2017-09-04 2 views
1

Ich versuche, zwei Liste von UserGroup aus zwei verschiedenen Tabelle mit einer einzigen Abfrage zu vergleichen, dh durch nicht mehrfache DB zu schlagen.Vergleichen übereinstimmende Element mit einer einzigen Abfrage in Iqueryable

zur Zeit bin ich Abrufen aller zugeordneten UserGroup in einer Abfrage und Vergleich mit allen zulässigen Usergroup in anderen Abfrage.

var query = _context.AppSubOperationUserGroupMappings.Where(filterPredicate) 
                  .Select(x => x.UserGroup) 
                  .ToList(); 

    var allowedUserGroups = _context.Users.Where(x => x.Id == userId) 
               .Select(x => x.UserGroupUserMappings.Select(y => y.UserGroup)) 
               .First() 
               .ToList(); 

    return query.Any(a => allowedUserGroups.Any(b => b.Id == a.Id)); 

Wie kann ich sie in einzelne Abfrage zusammenführen?

+0

Haben Sie einfach die '.ToList' in Ihren Abfragen versucht fallen. Das sollte zu einer einzelnen DB-Abfrage führen. – Sefe

Antwort

0

entfernen ToList und Erste verwenden und Select Registriert

var query = _context.AppSubOperationUserGroupMappings.Where(filterPredicate) 
    .Select(x => x.UserGroup); 

var allowedUserGroups = _context.Users.Where(x => x.Id == userId) 
    .SelectMany(x => x.UserGroupUserMappings, (x, y) => y.UserGroup); 

return query 
    .Join(
     allowedUserGroups, 
     x => x.Id, 
     x => x.Id, 
     (x, y) => false) // doesn't matter what to select 
    .Any(); 
Verwandte Themen