Provo ad unire IQueryable<int>
, che è una lista di ID entità con un IQueryable<Entity>
.
Per questo uso il seguente codice:
IQueryable<Entity> entityQuery = _context.Entities.Where(x => ...);
IQueryable<int> idQuery = _context.AccessRights.Where(x => ...).Select(x => x.Id);
query = entityQuery.Join(idQuery, x => x.Id, x => x, (x, y) => x);
Questo codice sta funzionando con gli elenchi in memoria, tuttavia se provo con LINQ a SQL, l' Join
viene ignorata.
Non voglio caricare gli ID in memoria. Questo è possibile anche con LINQ to SQL?
Potresti fare qualcosa come:
IQueryable<Entity> entityQuery = _context.Entities.Where(x => ...);
IQueryable<int> idQuery = _context.AccessRights.Where(x => ...).Select(x => x.Id);
entityQuery = entityQuery.Where(x => idQuery.Contains(x.Id));
Ciò otterrà il risultato che stai cercando senza caricare gli ID in memoria. Ma potrebbe convertirlo in una gigantesca istruzione SQL IN, che non sarebbe l'ideale.
Oppure puoi unirti ad AccessRights direttamente:
IQueryable<Entity> entityQuery = from e in _context.Entities.Where(x => ...)
join ar in _context.AccessRights.Where(x => ...)
on e.Id equals ar.Id
select e;