假设我提前知道我正在处理的请求需要我从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个单独的调用更有效,但无法弄清楚如何做到这一点。欢迎思考。
答案 0 :(得分:1)
不要这么快地说“显然这不起作用”。我认为它确实有效。它应该在单个查询中完成您想要的操作。 我明白了为什么您会认为它不起作用。它看起来确实像是独立的查询,因此也独立于往返。但是我正在阅读的其他示例(以及我自己的经验)似乎表明它知道如何将其组合为单个查询。
请参阅: Subquery with Entity Framework
也: 尝试在代码中放置一个断点,然后使用调试器检查生成的IQueryable(all_data)。它应该具有合并到单个查询中的Sql。
如果我在这里错了,我当然想知道更多。如果这不起作用,则Union()当然会起作用。虽然会有点难看。