2012-04-04 66 views
1

我想顯示一個列表來自我的數據庫使用Linqtosql,但我想我錯了。不能轉換ISingleResult IEnumerable

我寫的存儲過程,如果你想了解更多的信息檢索數據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(過程名稱+「Result」),以自動存儲數據。返回的類型始終爲ISingleResult<T>

所以,你可以嘗試以下方法:

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

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

+0

@OnlyHope - 試試我在答案中註明的兩種方法之一。你正在尋找的結果實際上被包裹在ISingleResult中。 – TheBoyan 2012-04-04 11:26:27

+0

這是非常有用的...謝謝你太多了。 – OnlyHope 2012-04-04 11:28:02

+0

@OnlyHope - 總是樂意幫忙;) – TheBoyan 2012-04-04 11:28:28

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

//還有其他的方法....

1

到處找同樣的問題並找到所有那些foreach循環 - 但隨後對我來說最簡單的事情.ToList()

return db.GetSubjects(Sday , Suserid).ToList();