Concat IQueryable collections in one db request

旧时模样 提交于 2019-12-22 10:58:19

问题


I use entity framework.I need concat two collections.For example:

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

Both 1 and 2 variant will do 2 requests in database,because these methods need IEnumerable as parameter.So,the question is can I concat two Iqueryble collections with one database call


回答1:


There are Concat() and Union() extension methods for IQueryable<T> in addition to IEnumerable<T>. You can use them on queryable objects. Union() maps to the SQL UNION operation and Concat() maps to UNION ALL.

As long as you don't convert the IQueryable<T> objects to IEnumerable<T> (either explicitly or implicitly) then you can just use these methods and they will be evaluated in the database if possible.

Further reading:

  • MSDN documentation for the Queryable class in .NET 4.5. This documents all of the extension methods that can potentially be evaluated in the database instead of in the CLR.

In glancing through the documentation I glossed over the detail that the extension methods declared on Queryable accept IQueryable<T> as the first parameter, but IEnumerable<T> as the second. As D Stanley points out, these methods will test if the argument is an IQueryable<T> and if so will attempt to resolve the operation using the relevant query engine.



来源:https://stackoverflow.com/questions/25632591/concat-iqueryable-collections-in-one-db-request

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!