2014-05-23 153 views
0
public static bool StudentUpdate(string studentId) 
{ 
    using (var db = new UniversityContext()) 
    { 
     int idtoupdate = Convert.ToInt32(studentId); 
     Student temp = db.Students.Where((a => a.Id) == idtoupdate) 
            .SingleOrDefault(); 
     if (temp != null) 
     { 
      temp.FirstName = feilds[0]; 
      temp.LastName = feilds[1]; 
      temp.Average = Convert.ToSingle(feilds[2]); 
      db.SaveChanges(); 
      return true; 
     } 
    } 
    return false; 
} 

我需要更新使用实体框架存储在数据库中的一些信息,但是当我尝试这个代码,我收到以下错误信息:如何比较一个整数与lambda?

操作“==”不能应用于类型的操作数“ lambda表达式'和'int'

我能做些什么来解决这个问题?

+1

只是把它写成'a => a.Id == idtoupdate' –

+0

说明:Lambdas有点像'独立操作'。它看起来像你想做一个比较,即'== idtoupdate',所以你必须包含比较_inside_ lambda。 – Kache

回答

4

尝试:

Student temp = db.Students.Where(a => a.Id == idtoupdate).SingleOrDefault(); 
+0

+1,有时是简单的东西:) –

0

你在错误的地方应该是Where((a) => a.Id == idtoupdate)了支架。

此外,正如Ulugbek所指出的,对于单个参数,括号不是必需的,您可以执行Where(a => a.Id == idtoupdate)

+1

单个参数不需要括号 –

+0

您的示例省略了单个参数的括号,实际上并没有省略它们。 – Servy

+0

@Servy现在,欢呼声 – phuzi

0

拉姆达

a => a.Id 

相当于

delegate(Student a) { return a.Id; } 

即它需要一个Student并返回学生的Id。在另一方面,拉姆达

a => a.Id == idtoupdate 

相当于

delegate(Student a) { return a.Id == idtoupdate; } 

,并返回一个值bool表示Student是否有要匹配的Id

您可以在那里为你应该使用提示在Where扩展方法,其记录为采取Func<int, bool> predicate,即它需要一个int(你想匹配的Id)的功能和定义返回一个bool(即,是否每个匹配提供的Id)。