尽管我非常喜欢LINQ并在我们当前的项目中使用,但有时候我们仍然面临着解决以下问题的问题。使用LINQ执行这些操作的方法有哪些?
- 返回来自数据库的单个数据库调用的多个结果(表),并在ASP.NET中进行绑定。
- 在存储过程的情况下,使用单个SP,我们可以使用单个数据库调用执行多个操作。我认为,使用LINQ,我们需要向数据库发送多个请求来执行多个操作。当然,在这种情况下,我们可以使用LINQ to SQL,但有没有其他方法可以做到这一点?
尽管我非常喜欢LINQ并在我们当前的项目中使用,但有时候我们仍然面临着解决以下问题的问题。使用LINQ执行这些操作的方法有哪些?
如果您使用Linq to SQL来查询多个数据库,那么它将构建对数据库的单个查询并执行该查询,除非您在添加查询的各个方面之间访问Linq对象。你也可以使用Linq to SQL调用存储过程,所以我没有看到任何问题。
您可以尝试使用LinqPad进行查询,并在该工具中查看用于查询数据库的生成SQL语句。您会惊讶于Linq to SQL的经济性。
我发现与LINQ,你最好打赌通常是返回匿名对象,并将它们组成真正的对象,你可以返回到用户界面。通常试图在你的单选中加入一堆其他表格会导致表现不佳,因为这些联结最终会变得非常大。
var users = (from p in db.Users
select new
{
p.aspnet_Users.UserName,
p.Area,
p.firstName,
p.lastName
});
1:
我从来没有这么做过,但我相信,LINQ可以接受多个表。你不能使用代码自动生成。
在自动生成的代码,你可以看到这样的事情:
IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), date, city, state, country);
return ((ISingleResult<GetCityVisitTotalResult>)(result.ReturnValue));
它值得你去尝试它转换为IMultipleResults(即使是小样本): http://msdn.microsoft.com/en-us/library/system.data.linq.imultipleresults.aspx
关于第二:
如果你确实需要在单个调用中执行一些SP,你可以创建SP来执行sql,编写执行你的存储过程的代码:)
我endup与存储过程接受列表参数。作为例子,而不是20调用SetViewsForContent @contentid我将csv列表传递给SetViewForContentList
在SQL中,我创建了函数intlisttotable(字符串,分隔符),并且它很容易处理它。
这是一个很好的观点,多个查询的开销可能低于单个查询中的大量连接。 – Lazarus 2010-10-29 16:30:57