2012-04-04 3 views
1

Я пытаюсь отобразить список, исходящий из моей базы данных, используя Linqtosql, но я предполагаю, что я ошибаюсь.Невозможно преобразовать ISingleResult в IEnumerable

Я написал 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'. 

Знаете ли вы, как я могу это исправить?

ответ

2

Проверьте

db.GetSubjects (Sday, Suserid);

способ (хранимая процедура). Похоже, что он возвращает только одно значение определенного типа, что означает, что он не может быть назначен IEnumerable<T>, например List<T>.

Поскольку вы используете хранимую процедуру в LINQ, он будет генерировать класс T (имя процедуры + «Результат») для автоматического сохранения данных. Возвращаемый тип всегда ISingleResult<T>.

Таким образом, вы можете попробовать следующее:

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

или просто использовать db.GetSubjects (Sday , Suserid).ReturnValue;

+0

@OnlyHope - попробуйте один из двух способов, которые я отметил в ответе. Результат, который вы ищете, фактически завернут в ISingleResult. – TheBoyan

+0

Это очень полезно ... Большое спасибо. – OnlyHope

+0

@OnlyHope - всегда рад помочь;) – TheBoyan

0

Есть несколько способов, вы можете вернуть сохраненные результаты Proc ... смотрите ниже

общественного YourDataContext контекст;

// предполагает JSon возврата товара

public JsonResult GetResults(string param1, string param2) 
{ 
    using(context = new YourDataContext()) 
    { 
     return Json(context.YourStoredProc(param1, param2).ToList<YourStoredProcResult>()); 
    } 
} 

// Предполагает JUST комплексного возврата товара

public List<YourStoredProcResult> GetResults(string param1, string param2) 
     { 
      using(context = new dataDataContext()) 
      { 
       return context.YourStoredProc(param1, param2).ToList<YourStoredProcResult>(); 
      } 
     } 

// Существует и другие способы ....

1

Искал везде одной и те же задачи и найти только все эти foreach петли - но тогда для меня работала самая простая вещь .ToList():

return db.GetSubjects(Sday , Suserid).ToList(); 
Смежные вопросы