2009-11-22 74 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