具有id IQueryable的EF Core join實體IQueryable

c# entity-framework-core linq-to-sql

我嘗試加入IQueryable<int> ,它是一個具有IQueryable<Entity>的實體ID列表。

為此,我使用以下代碼:

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);

此代碼正在使用內存列表,但是如果我嘗試使用LINQ to sql,則會忽略Join

我不想將ID加載到內存中。 LINQ to SQL甚至可以實現這一點嗎?

熱門答案

你可以這樣做:

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));

這將獲得您正在尋找的結果,而無需將ID加載到內存中。但它可能會將其轉換為一個巨大的SQL IN語句,這不是理想的。

或者您可以直接加入AccessRights:

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;


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow