C# 使用LINQ到实体框架从多个不相关的表中选择数据

C# 使用LINQ到实体框架从多个不相关的表中选择数据,c#,linq,entity-framework,C#,Linq,Entity Framework,假设我提前知道,我正在处理的请求将要求我从5个不同的表中提取不相关的数据来填充页面的不同部分 有没有一种方法可以更有效地将它们组合成一个数据库调用,返回5个不同的数据集 比如: var all_data = context.Select(a => new { dataset1 = context.Table1.Where(b => b.XXX == XXX), dataset2 = context.Table2.Where(b => b.XXX == XXX

假设我提前知道,我正在处理的请求将要求我从5个不同的表中提取不相关的数据来填充页面的不同部分

有没有一种方法可以更有效地将它们组合成一个数据库调用,返回5个不同的数据集

比如:

var all_data = context.Select(a => new {
     dataset1 = context.Table1.Where(b => b.XXX == XXX),
     dataset2 = context.Table2.Where(b => b.XXX == XXX),
     dataset3 = context.Table3.Where(b => b.XXX == XXX),
     dataset4 = context.Table4.Where(b => b.XXX == XXX),
     dataset5 = context.Table5.Where(b => b.XXX == XXX),
});
(显然上述方法不起作用)然后我可以对每种方法做我需要的任何事情,例如:

GridView1.DataSource = all_data.dataset1;
GridView1.DataBind();
GridView2.DataSource = all_data.dataset2;
GridView2.DataBind();
我觉得这会比向数据库发送5个单独的调用更有效,但我不知道怎么做。欢迎思想。

不要这么快说“显然这不起作用”。我认为它确实有效。它应该在单个查询中完成您想要的操作。 我明白为什么你会认为它不起作用了。它看起来确实像是单独的查询,因此是单独的往返。但我正在阅读的其他示例(以及我自己的经验)似乎表明,它知道如何将其组合到单个查询中

见:

此外: 尝试在代码中放置断点,并使用调试器检查生成的IQueryable(所有_数据)。它应该具有组合到单个查询中的Sql


如果我在这里错了,我当然想知道更多。如果这不起作用,工会()肯定会起作用。尽管这会有点难看。

未来的查询在这里是可行的。这使得它看起来应该是最新的,但我个人并没有使用过。不过,我希望它能包含在框架中,类似于NHibernate的
未来
。我会查看它……希望找到一个不需要其他库的解决方案。当然,它不起作用<代码>上下文。选择甚至不编译。