C#Linq一次调用DB获取多个列表

时间:2012-10-11 11:08:56

标签: c# linq

得到了这个:

var ApprovalRoleRefList = db.ApprovalRoles.Select(x => x.ApprovalRoleName);
var CostDivisionRefList = db.CostDivisions.Select(x => x.CostDivisionName);

如果我想用linq一次调用DB,我该怎么做?

这不是我想要的:

var lists = (from ar in db.ApprovalRoles select ar.ApprovalRoleName).Concat (
from cd in db.CostDivisions select cd.CostDivisionName);

在项目中,我还有3个列表,但是有1个电话或5个电话是“性能不好”吗? 我知道这部分不会用得那么多,但优化它很有趣。

2 个答案:

答案 0 :(得分:2)

我不得不说Jon非常好,我会在这里谈谈。显然,进行一次以上的往返比制作五次更昂贵,但只是在简单的水平上。此外,并不是不需要此功能。考虑一下Stack Overflow使用的Dapper,它实际上具有执行您正在寻找的功能的功能。因此,功能存在的事实告诉我,即使Stack Overflow也需要在某一点上执行此操作。

然而,在将自己与Stack Overflow的需求进行比较之前,让我们考虑为什么Stack Overflow可能需要此功能。 As of 2010他们每天点击量达到150万次。好吧,当你得到那么多点击时,你需要使用很多不同的技术并且进行一次往返是那些 至少 技术。极限缓存,负载平衡,服务器群,分布式计算以及列表都在不断发展。

所以简而言之,在没有完全理解你的应用程序的情况下,我会说除非你陷入Stack Overflow的困境,你每天要发出数百万次的读写操作,否则你正在优化一些能够真正产生的东西。没变。因此,5次往返是正确的方法。

答案 1 :(得分:0)

如果必须在一个请求中返回结果,LINQ to SQL确实支持来自存储过程的多个结果集。看看http://www.thinqlinq.com/Post.aspx/Title/Using-LINQ-to-SQL-to-return-Multiple-Results,看看是否符合您的需求。