2009-11-22 57 views
0
var pom= from k in dataContext.student_gods 
          where k.skgod==System.Convert.ToString(2002/03) 
          select k; 
      foreach(var i in pom){ 
      var predmeti = from m in dataContext.student1s 
          where m.id_stud ==System.Convert.ToString(i.id_stud) 

          select m; 


      } 
      return View(predmeti); 

這是建議後的代碼。我有一個錯誤:名稱predmeti在當前上下文中不存在。如果在foreach循環之前聲明var predmeti我不知道如何初始化linq問題(C#)

回答

1

我認爲你太過複雜了,冒着臭名昭着的foreach /捕獲問題(因爲LINQ使用延遲執行)。也許只是:

var pom= from k in dataContext.student_gods 
     where k.skgod==System.Convert.ToString(2002/03) 
     select k.id_stud; 
var list = pom.ToList(); 
var predmeti = from m in dataContext.student1s 
       where list.Contains(m.id_stud) 
       select m; 
return View(predmeti); 
+0

現在我試過了,但它不返回表 – Ognjen 2009-11-22 13:28:50

+0

的數據那麼,列表中是否有任何數據?由於我們無法重現您的設置,您將不得不幫助我們... – 2009-11-22 13:32:03

+0

我如何檢查列表是否爲空?我認爲問題是在列表 – Ognjen 2009-11-22 13:36:53

3

return位於foreach循環的中間。我不確定上下文是什麼,但您可能想要yield return而不是使用整個集合構建視圖。

在這種情況下,您在迭代的集合中的第一項之後退出該方法。

0

是因爲你正在返回foreach循環中的函數嗎?

foreach(var i in pom){ 
      var predmeti = from m in dataContext.student1s 
          where m.id_stud ==System.Convert.ToString(i.id) 

          select m; 

      return View(predmeti); 
} 

這意味着函數將在第一個i處退出。

1

這行代碼看起來太奇怪了吧:

where k.skgod==System.Convert.ToString(2002/03); 

這意味着你會得到所有記錄k.skgod = 667.這是你的意圖?

儘管如其他人已經提到, foreach中的返回將有效地防止代碼返回集合中第一個對象以外的任何內容。

+0

這意味着我將得到所有的學生從2002/03年 – Ognjen 2009-11-22 12:43:05

+0

所以,從2002/03年的所有學生都有'skgod = 667'? – 2009-11-22 12:47:34

+0

在數據表中的列:id_stud first_name last_name skgod .... – Ognjen 2009-11-22 13:15:48