使用LINQ to Entity Framework从多个不相关的表中选择数据

时间:2013-12-22 14:41:06

标签: 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),
     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个单独的调用更有效,但无法弄清楚如何做到这一点。欢迎思考。

1 个答案:

答案 0 :(得分:1)

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

请参阅: Subquery with Entity Framework

也: 尝试在代码中放置一个断点,然后使用调试器检查生成的IQueryable(all_data)。它应该具有合并到单个查询中的Sql。

如果我在这里错了,我当然想知道更多。如果这不起作用,则Union()当然会起作用。虽然会有点难看。