我使用 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>(显式或隐式),那么您就可以使用这些方法,如果可能,它们将在数据库中进行评估。

进一步阅读:

  • MSDN documentation for the 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/

    10-13 08:46