EF - 从单个查询返回多个结果集

时间:2016-02-16 20:22:51

标签: c# entity-framework linq-to-sql

使用实体框架和linq,我希望从数据库中的3个不同表中返回3个不同的结果集。这些表基本上包含填充视图模型选择列表的查找值。目前,我必须对数据库进行3次单独调用,以检索每个项目列表。我可以将其减少到一个电话吗?

我已经尝试了以下操作,但是没有用:

mysql> mysqldump --databases database-name --host instance-IP --user=user-name --password

3 个答案:

答案 0 :(得分:0)

假设三个表DurationTypesPlatforms以任何方式无关:

考虑使用单个SELECT语句的SQL查询如何查询所有三个表。您找不到符合您需求的产品。

因此,在这种情况下,创建三个不同的查询是绝对合理的。但是,您可以做和应该做的是,对三个查询使用相同的dbContext实例。

var durationsList = await dbContext.Durations.ToListAsync();
var typesList = await dbContext.Types.ToListAsync();
var platformsList = await dbContext.Platforms.ToListAsync();

答案 1 :(得分:0)

如果减少数据库往返是你所追求的, 您可以使用Future()(Z.EntityFramework.Plus的一部分)批量处理您的请求

var durationsFuture = dbContext.Durations.Future();
var typesFuture = dbContext.Types.Future();
var platformsFuture = dbContext.Platforms.Future();

var durationsList = durationsFuture.ToList(); // this line will retrieve all 3 collections
var typesList = typesFuture.ToList();
var platformsList = platformsFuture.ToList();

答案 2 :(得分:-1)

逻辑上,您应该对SQL进行3次单独查询。 使这3个调用填充不相关的查找值完全没有错。

但是如果你绝对想要避免3个DB调用(相当于一个包含3个SELECT语句的SPROC)

注意:这是一个笛卡尔积,适用于所有3个表。

你可以在LINQ查询之后尝试这个吗...我们试图得到这3个表的笛卡尔积(真实条件)并投射出3个表而没有任何关系。

var lists = await dbContext.Durations.Join(dbContext.Types, d => true, t => true, 
                                           (d, t) => new { d, t })
                                     .Join(dbContext.Platforms, dt => true, p => true, 
                                           (dt, p) => new 
                                                     { 
                                                      Duration = dt.d, 
                                                      Type = dt.t, 
                                                      Platform = p
                                                     })
                                     .Distinct()
                                     .ToListAsync();