通过存储过程将LINQ数据绑定到Gridview

时间:2009-07-15 20:26:12

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

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&lt;&gt;的非转换错误输入到DataTable。

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

解决了它,:)

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

            return query;
        }
    }

答案 2 :(得分:0)

这是一个明智的选择。

由于您正在触发Linq查询,因此无论运行时类型是什么,它都至少会返回IEnumerable<T>

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

正如您所做的那样,返回System.object会有效,但会涉及演员阵容,这会影响演出。