Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以使用实体框架在单个数据库调用中轻松地评估多个iQueryTables吗?_C#_Sql Server_Entity Framework_Entity Framework 4_Iqueryable - Fatal编程技术网

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单独的结果集。页面上有可配置的“块”,每个块都显示符合特定标准集的小部件。一个小部件应该出现在所有它符合条件的块中。