如何通过一个数据库往返执行两个 EF linq 查询

Posted

技术标签:

【中文标题】如何通过一个数据库往返执行两个 EF linq 查询【英文标题】:How to execute two EF linq query with one db round trip 【发布时间】:2017-12-08 10:44:43 【问题描述】:

当我们使用 ado.net 时,我们可以传递多个用逗号分隔的 sql。这是一个例子。

SqlConnection connection = new SqlConnection();
SqlCommand command = new SqlCommand();
connection.ConnectionString = connectionString; // put your connection string
command.CommandText = @"
     update table
     set somecol = somevalue;
     insert into someTable values(1,'test');";
command.CommandType = CommandType.Text;
command.Connection = connection;

try

    connection.Open();

finally

    command.Dispose();
    connection.Dispose();

我想知道如何构建基于 EF linq 的查询,该查询将从多个表中获取数据,但两个表之间没有关系。所以我们不能执行join。

所以给我看一个例子,其中 EF 将从学生和产品表中获取数据,而无需任何连接,一次 db 往返。根据我上面的例子,ado.net 有可能吗?

 var query = from data in context.Student
                orderby data.name
                select data;


 var query = from data in context.Product
                orderby data.name
                select data;

当运行上述两个查询时,将发生两次数据库往返还是一次?

我需要从名为 student 和 product 的两个表中获取数据,其中一个 db 往返就像我上面的 EF linq 查询一样。

如果可能,然后与示例代码讨论。谢谢

【问题讨论】:

无!!!在您使用变量查询之前,查询不会执行。 【参考方案1】:

开箱即用不支持此功能,但存在启用此功能的“未来查询”包:https://www.nuget.org/packages/Z.EntityFramework.Plus.QueryFuture.EF6/

【讨论】:

能否添加一个使用 QueryFuture.EF6 插件从 2 个表中获取数据的示例。我检查了他们的网站,但没有找到类似的例子。 在github.com/zzzprojects/EntityFramework-Plus/wiki/…有例子 你在说这个例程吗` var ctx = new EntitiesContext(); var futureCountries = ctx.Countries.Where(x => x.IsActive).Future(); var futureStates = ctx.States.Where(x => x.IsActive).Future(); var country = futureCountries.ToList(); var states = futureStates.ToList();` 看到有两个单独的 ToList() 像futureCountries.ToList() and futureStates.ToList() and ...我猜两个数据库往返会发生。请告诉我会发生什么? 两个查询的 db 往返将发生在第一个 ToList() 上

以上是关于如何通过一个数据库往返执行两个 EF linq 查询的主要内容,如果未能解决你的问题,请参考以下文章

linQ!!增删改查 好用!

利用LinQ技术和lambd表达式进行增删改查

实体框架:减少往返的方法?

使用 EF 和 Linq 通过另一个表字段值的值在表中查找字段

[Linq]使用EF To Linq执行类似sql的in语句

EF 6.x,LINQ-to-SQL和原始SQL子句