【问题标题】:What are the ways to perform these using LINQ?使用 LINQ 执行这些操作的方法是什么?
【发布时间】:2010-10-29 16:22:54
【问题描述】:

虽然我非常喜欢 LINQ 并在我们当前的项目中使用,但有时我们会遇到以下问题。

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

【问题讨论】:

    标签: asp.net sql linq


    【解决方案1】:

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

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

    【讨论】:

    • 这很好,多个查询的开销可能低于单个查询的大量连接。
    【解决方案2】:

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

    您可以使用LinqPad 尝试查询,并在工具中查看生成的用于查询数据库的 SQL 语句。您会惊讶于 Linq to SQL 的经济性。

    【讨论】:

      【解决方案3】:

      第一个:

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

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

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

      【讨论】:

        猜你喜欢
        • 2014-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-06
        • 1970-01-01
        • 2012-10-02
        • 1970-01-01
        相关资源
        最近更新 更多