我正在尝试使用Linqtosql显示来自我的数据库的列表,但我想我做错了。
如果您想了解更多信息,我写了SPROC来检索数据here: 这是我的代码:
protected List<MySubject> GetSubjects(int userID, string Datetime)
{
userID = user_id;
string[] dates = Datetime.Split('-');
int year = int.Parse(dates[2]);
int month = int.Parse(dates[1]);
int day = int.Parse(dates[0]);
ClassDAO classClass = new ClassDAO();
List<MySubject> myTodaySubjects = GetSubjectsLinq(userID, day);
GetSubjectsLinq(userID, day);
return myTodaySubjects;
}
private List<MySubject> GetSubjectsLinq(int UserId, int day)
{
MySchoolDBDataContext db = new MySchoolDBDataContext();
string Suserid = UserId.ToString();
string Sday = day.ToString();
var sub = db.GetSubjects(Sday , Suserid);
return sub.ToList<MySubject>();
}
此行"return sub.ToList<MySubject>();"
显示此错误:
Error 21 Instance argument: cannot convert from
'System.Data.Linq.ISingleResult' to 'System.Collections.Generic.IEnumerable'.
你知道我该怎么办呢?
答案 0 :(得分:2)
检查
db.GetSubjects(Sday,Suserid);
方法(存储过程)。它看起来只返回某个类型的单个值,这意味着它无法分配给IEnumerable<T>
,例如List<T>
。
由于您在LINQ中使用存储过程,因此它将生成一个类T(过程名称+“Result”),以便您自动存储数据。返回的类型始终为ISingleResult<T>
。
所以,您可以尝试以下方法:
ISinlgeResult<MySubjectResult> sub = db.GetSubjects(Sday , Suserid);
foreach(MySubjectResult val in sub)
{
...
}
或只使用db.GetSubjects (Sday , Suserid).ReturnValue;
答案 1 :(得分:1)
到处寻找同样的问题,只找到所有那些foreach
循环 - 但对我来说,最简单的事情是.ToList()
:
return db.GetSubjects(Sday , Suserid).ToList();
答案 2 :(得分:0)
有多种方法可以返回存储的proc结果...见下文
public YourDataContext context;
//假设Json返回
public JsonResult GetResults(string param1, string param2)
{
using(context = new YourDataContext())
{
return Json(context.YourStoredProc(param1, param2).ToList<YourStoredProcResult>());
}
}
//假设只是复杂的回归
public List<YourStoredProcResult> GetResults(string param1, string param2)
{
using(context = new dataDataContext())
{
return context.YourStoredProc(param1, param2).ToList<YourStoredProcResult>();
}
}
//还有其他方法....