【问题标题】:Bind LINQ data via stored procedure to Gridview通过存储过程将 LINQ 数据绑定到 Gridview
【发布时间】:2010-11-11 03:39:22
【问题描述】:

dbml中的函数是,

    [Function(Name = "dbo.sp_GetQuestions")]
    public ISingleResult<vw_QuestionMaster> sp_GetQuestions([Parameter(Name = "Sort", DbType = "Int")] System.Nullable<int> sort, [Parameter(Name = "Title", DbType = "VarChar(50)")] string title, [Parameter(Name = "Tags", DbType = "VarChar(50)")] string tags, [Parameter(Name = "RecordFrom", DbType = "Int")] System.Nullable<int> recordFrom, [Parameter(Name = "RecordTo", DbType = "Int")] System.Nullable<int> recordTo)
    {
        IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), sort, title, tags, recordFrom, recordTo);
        return ((ISingleResult<vw_QuestionMaster>)(result.ReturnValue));
    }

我在DataAccessLayer中定义的函数是,

    public static ?????????????????? GetMostDiscussedQuestions()
    {
        using (AbToBolDataClassesDataContext db = new AbToBolDataClassesDataContext())
        {
            //ISingleResult<vw_QuestionMaster> questions = db.sp_GetQuestions(1, null, null, 1, 5);
            //return questions.ToList();

            var query = from qm in db.sp_GetQuestions(1, null, null, 1, 5)
                        select qm;

            return query;
        }
    }

在这种情况下,我正在调用上述方法来设置 gridview 的数据源。虽然我通过调用存储过程来获取查询中的数据,但请注意我该方法的正确返回类型应该是什么。以及如何从“查询”中获取相同的内容。

我尝试了 query.ToList(),但抛出了未将 List 类型转换为 DataTable 的错误。

【问题讨论】:

    标签: c# asp.net linq stored-procedures gridview


    【解决方案1】:

    除非您在 dbml 设计器中指定了“返回类型”,否则它将是自动生成的类型,您将无法轻松地从方法中返回它。

    如果您进入设计器,选择您的存储过程,并在属性窗格中将返回类型更改为与您的视图相同(假设它们都返回相同的结构),您应该能够保持您的返回类型作为您当前使用的视图。

    【讨论】:

      【解决方案2】:

      解决了,:)

          public static object GetMostDiscussedQuestions()
          {
              using (AbToBolDataClassesDataContext db = new AbToBolDataClassesDataContext())
              {
                  List<vw_QuestionMaster> query = db.sp_GetQuestions(1, null, null, 1, 5).ToList();
      
                  return query;
              }
          }
      

      【讨论】:

        【解决方案3】:

        这很简单。

        由于您正在触发一个 Linq 查询,它至少会返回一个 IEnumerable&lt;T&gt;,无论运行时类型是什么。

        因此,您可以安全地返回 IEnumerable&lt;T&gt; 作为您的 GetMostDiscussedQuestions 方法的编译时间类型。

        如您所做的那样返回System.object 会起作用,但会涉及演员表,这会影响性能。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-20
          • 1970-01-01
          • 1970-01-01
          • 2022-01-07
          • 1970-01-01
          • 1970-01-01
          • 2015-02-28
          相关资源
          最近更新 更多