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。
答案 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
会有效,但会涉及演员阵容,这会影响演出。