无法将ISingleResult转换为IEnumerable

时间:2012-04-04 11:12:27

标签: sql list type-conversion ienumerable

我正在尝试使用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'. 

你知道我该怎么办呢?

3 个答案:

答案 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>();
            }
        }

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