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