繁体   English   中英

EF ID为IQueryable的EF Core连接实体IQueryable

[英]EF Core join entity IQueryable with id IQueryable

我尝试加入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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM