使用LINQ执行这些操作的方法有哪些?

时间:2010-10-29 16:22:55

标签: asp.net sql linq

虽然我非常喜欢LINQ并且在我们当前的项目中使用,但有时我们面临着解决以下问题的问题。

  1. 使用来自数据库的单个数据库调用返回多个结果(表),并在ASP.NET中绑定相同的结果。
  2. 对于存储过程,使用单个SP,我们可以使用单个DB调用执行多个操作。我认为,使用LINQ,我们需要向DB发送多个请求以执行多个操作。当然,在这种情况下,我们可以使用LINQ to SQL,但有没有其他方法可以做到这一点?

3 个答案:

答案 0 :(得分:2)

我发现LINQ你最好选择返回匿名对象并将它们组合成可以返回UI的真实对象。通常尝试在单个选择中包含一堆其他表将会表现不佳,因为连接最终会非常大。

var users = (from p in db.Users
                         select new
                         {
                             p.aspnet_Users.UserName,
                             p.Area, 
                             p.firstName,
                             p.lastName
                         });

答案 1 :(得分:0)

如果您使用Linq to SQL查询多个数据库,那么它将构建对数据库的单个查询并执行该查询,除非您在添加查询的各个方面之间访问Linq对象。您还可以使用Linq to SQL调用存储过程,因此我没有看到任何问题。

您可以使用LinqPad体验查询,并在该工具中查看用于查询数据库的生成的SQL语句。你会对Linq to SQL的经济性感到惊讶。

答案 2 :(得分:0)

第一名:

我从来没有这样做,但我相信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,则可以创建执行sql的SP,编写执行存储过程的代码:)

我最终接受了接受列表参数的存储过程。例如,我将csv列表传递给SetViewForContentList而不是20次调用SetViewsForContent @contentid

在SQL中我创建了函数intlisttotable(string,separator),而且很容易处理它。