C# 我可以使用实体框架在单个数据库调用中轻松地评估多个iQueryTables吗?
假设我有一个C# 我可以使用实体框架在单个数据库调用中轻松地评估多个iQueryTables吗?,c#,sql-server,entity-framework,entity-framework-4,iqueryable,C#,Sql Server,Entity Framework,Entity Framework 4,Iqueryable,假设我有一个IQueryable的集合(任意大小)(都是针对相同的MyEntity类型)。每个查询都已成功地动态构建,以将各种业务逻辑封装到一个表单中,该表单可以在单个数据库中进行评估。我现在有没有办法让所有这些IQueryables以到数据库的单程往返执行 例如(简化;我的实际查询更复杂!),如果我有 ObjectContext context = ...; var myQueries = new[] { context.Widgets.Where(w => w.Price &g
IQueryable
的集合(任意大小)(都是针对相同的MyEntity
类型)。每个查询都已成功地动态构建,以将各种业务逻辑封装到一个表单中,该表单可以在单个数据库中进行评估。我现在有没有办法让所有这些IQueryable
s以到数据库的单程往返执行
例如(简化;我的实际查询更复杂!),如果我有
ObjectContext context = ...;
var myQueries = new[] {
context.Widgets.Where(w => w.Price > 500),
context.Widgets.Where(w => w.Colour == 5),
context.Widgets.Where(w => w.Supplier.Name.StartsWith("Foo"))
};
我希望EF执行每个查询的翻译(它可以单独执行),然后在一次数据库访问中执行
SELECT * FROM Widget WHERE Price > 500
SELECT * FROM Widget WHERE Colour = 5
SELECT W.* FROM Widget
INNER JOIN SUpplier ON Widget.SupplierId = Supplier.Id
WHERE Supplier.Name LIKE 'Foo%'
然后将每个结果集转换为一个IEnumerable
,以通常的方式更新ObjectContext
我看过很多关于处理存储过程中的多个结果集的帖子,但这有点不同(尤其是因为我不知道在编译时会有多少个结果集)。有没有一种简单的方法,或者我必须使用类似的方法?否。EF deosn没有查询批处理(将来的查询)。一个查询是一个数据库往返。作为解决方法,您可以尝试使用它,例如使用:
string sql = ((ObjectQuery<Widget>)context.Widgets.Where(...)).ToTraceString();
这将导致
联合
。如果您只需要UNION ALL
,则可以使用Concat
方法。否。EF没有查询批处理(将来的查询)。一个查询是一个数据库往返。作为解决方法,您可以尝试使用它,例如使用:
string sql = ((ObjectQuery<Widget>)context.Widgets.Where(...)).ToTraceString();
这将导致
联合
。如果你只需要UNION-ALL
,你可以使用Concat
方法来代替。答案可能晚了,希望它能帮助其他人解决同样的问题
NuGet上有实体框架扩展库,它提供了未来查询功能(以及其他功能)。我玩了一点,它看起来很有前途
你可以找到更多的信息。答案可能晚了,希望它能帮助其他人解决同样的问题 NuGet上有实体框架扩展库,它提供了未来查询功能(以及其他功能)。我玩了一点,它看起来很有前途
您可以找到更多信息。是否要查找所有价格大于500且颜色为5的小部件?或者您正在尝试获得两个单独的结果集:(所有价格>500的小部件)和(所有颜色为5的小部件,无论价格如何)?@Chris单独的结果集。页面上有可配置的“块”,每个块都显示符合特定标准集的小部件。小部件应该出现在所有符合条件的块中。您是否试图查找所有价格大于500且颜色为5的小部件?或者您正在尝试获得两个单独的结果集:(所有价格>500的小部件)和(所有颜色为5的小部件,无论价格如何)?@Chris单独的结果集。页面上有可配置的“块”,每个块都显示符合特定标准集的小部件。一个小部件应该出现在所有它符合条件的块中。