1

我正在尝试使用 Linqtosql 显示来自我的数据库的列表,但我想我做错了。

如果您需要更多信息,我编写了 SPROC 以在此处检索数据:这是我的代码:

     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'. 

你知道我该如何解决吗?

4

3 回答 3

3

检查你的

db.GetSubjects (Sday, Suserid);

方法(存储过程)。看起来它只返回某种类型的单个值,这意味着它不能分配给IEnumerable<T>诸如 a List<T>

由于您在 LINQ 中使用存储过程,它会自动生成一个类 T(procedure name + "Result") 来存储数据。返回的类型始终是ISingleResult<T>

因此,您可以尝试以下方法:

ISinlgeResult<MySubjectResult> sub = db.GetSubjects(Sday , Suserid);
foreach(MySubjectResult val in sub)
{
...
}

或者只是使用db.GetSubjects (Sday , Suserid).ReturnValue;

于 2012-04-04T11:15:47.137 回答
1

到处寻找同样的问题,只找到所有这些foreach循环 - 但对我来说,最简单的事情是.ToList()

return db.GetSubjects(Sday , Suserid).ToList();
于 2014-09-10T08:28:52.270 回答
0

您可以通过多种方式返回存储的过程结果...见下文

公共 YourDataContext 上下文;

//假设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>();
            }
        }

//还有其他方法....

于 2014-09-09T07:30:44.900 回答