我使用 Entity Framework 。我需要连接两个集合。例如:
IQueryable<SomeType> collection1 = context.Entiies.Where(predicate);
IQueryable<SomeType> collection2 = context.Entiies.Where(otherPredicate);
var result = collection1.concat(collection2).toList(); //1
var result = collection1.union(collection2).toList; //2
1 和 2 变体都会在数据库中执行 2 请求,因为这些方法需要 IEnumerable 作为参数。所以,问题是我可以用一个数据库调用连接两个 Iqueryble 集合
最佳答案
除了 Concat()
之外,还有用于 Union()
的 IQueryable<T>
和 IEnumerable<T>
扩展方法。您可以在可查询对象上使用它们。 Union()
映射到 SQL UNION
操作,Concat()
映射到 UNION ALL
。
只要您不将 IQueryable<T>
对象转换为 IEnumerable<T>
(显式或隐式),那么您就可以使用这些方法,如果可能,它们将在数据库中进行评估。
进一步阅读:
Queryable
class in .NET 4.5 。这记录了所有可能在数据库中而不是在 CLR 中评估的扩展方法。 在浏览文档时,我忽略了在
Queryable
上声明的扩展方法接受 IQueryable<T>
作为第一个参数,但 IEnumerable<T>
作为第二个参数的细节。正如 D Stanley 指出的那样,这些方法将测试参数是否为 IQueryable<T>
,如果是,将尝试使用相关查询引擎解析操作。关于c# - 一个数据库请求中的 Concat IQueryable 集合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25632591/