我使用实体框架。我需要连接两个集合。例如:
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() http://msdn.microsoft.com/en-us/library/vstudio/bb351755(v=vs.90).aspx and Union() http://msdn.microsoft.com/en-us/library/vstudio/bb156049(v=vs.90).aspx的扩展方法IQueryable<T>
此外IEnumerable<T>
。您可以在可查询对象上使用它们。Union()
映射到 SQLUNION
操作和Concat()
映射到UNION ALL
.
只要你不转换IQueryable<T>
反对IEnumerable<T>
(显式或隐式)那么您可以使用这些方法,如果可能的话,它们将在数据库中进行评估。
进一步阅读:
-
MSDN 文档Queryable.NET 4.5 中的类 http://msdn.microsoft.com/en-us/library/vstudio/system.linq.queryable(v=vs.110).aspx。该文档记录了可能在数据库而不是 CLR 中评估的所有扩展方法。
在浏览文档时,我忽略了扩展方法声明的细节Queryable
accept IQueryable<T>
作为第一个参数,但是IEnumerable<T>
作为第二个。正如 D Stanley 指出的,这些方法将测试参数是否是一个IQueryable<T>
如果是这样,将尝试使用相关查询引擎来解决该操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)