具有id IQueryable的EF Core join实体IQueryable

时间:2016-10-31 19:50:00

标签: c# linq-to-sql entity-framework-core

我尝试加入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甚至可以实现这一点吗?

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

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;