2012-07-25 185 views
2

我有实体框架代码,如下所示。我在哪里出现以下错误条件。使用“where”:无法将lambda表达式转换为类型'bool'

无法转换lambda表达式“BOOL”类型,因为它不是一个委托类型

如何克服这个问题?这个错误的原因是什么?

static void Main(string[] args) 
    { 

     ClubCreation(); 
     List<Club> selectedClubs = GetClubs("club1"); 

    } 

    public static void ClubCreation() 
    { 

     string connectionstring = "Data Source=.;Initial Catalog=NerdDinners;Integrated Security=True;Connect Timeout=30"; 
     using (var db = new NerdDinners(connectionstring)) 
     { 

      Club club1 = new Club(); 
      club1.ClubName = "club1"; 

      Club club2 = new Club(); 
      club2.ClubName = "club2"; 

      Club club3 = new Club(); 
      club3.ClubName = "club3"; 

      db.Clubs.Add(club1); 
      db.Clubs.Add(club2); 
      db.Clubs.Add(club3); 

      int recordsAffected = db.SaveChanges(); 


     } 
    } 

    public static List<Club> GetClubs(string clubName) 
    { 
     string connectionstring = "Data Source=.;Initial Catalog=NerdDinners;Integrated Security=True;Connect Timeout=30"; 
     using (var db = new NerdDinners(connectionstring)) 
     { 

      Club club1 = new Club(); 
      Club club2 = new Club(); 
      Club club3 = new Club(); 


      var query = from o in db.Clubs 
         where (p => p.ClubName == "club1") 
         select o; 

      return query.ToList(); 





     } 
    } 
+1

'p'应该是什么?在我看来,就像您在LINQ查询中使用的“o”的拼写错误。 – BoltClock 2012-07-25 07:54:42

+0

为什么你在你的情况下对''club1''进行硬编码而不是使用'clubName'参数? – 2012-07-25 07:55:34

回答

8

而不是where (p => p.ClubName == "club1")使用:

var query = from o in db.Clubs 
      where o.ClubName == "club1" 
      select o; 

可能是你感到困惑与方法链接哪里会:

var query = db.Clubs.Where(p => p.ClubName == "club1"); 
+0

相反它可能是...哪里o.ClubName ==“club1” – 2012-07-25 07:55:51

+0

谢谢。假设我正在使用FirstOrDefault而不是WHERE。我们如何对Club对象进行“var query”? – Lijo 2012-07-27 12:19:35

+1

'var query = db.Clubs.FirstOrDefault(p => p.ClubName ==“club1”);' – Habib 2012-07-27 15:10:55

1
 var query = from o in db.Clubs 
        where o.ClubName == "club1" 
        select o; 
+2

“全部错误”有点你不觉得:) – albertjan 2012-07-25 07:57:01

+0

LOL我只是想着对自己:-) – Shai 2012-07-25 07:58:50

0
var query = from o in db.Clubs 
      where o.ClubName == "club1" 
      select o; 
+0

只是FYI ...与四个空格缩进仅适用于代码块。请不要将您的整个文本作为代码块。人们已经编辑了一些以前的帖子,但看起来你还没有得到提示。请参阅http://stackoverflow.com/editing-help以了解如何格式化您的帖子,并使用修改链接修复它们。 – BoltClock 2012-07-25 07:57:43

+0

Ok BoltClock谢谢你的帮助 – 2012-07-25 07:58:59

1

=>语法使用在方法中c海因符号。您可能还想使用clubName变量而不是"club1"

var query = db.Clubs.Where (p => p.ClubName == clubName); 

这确实与此相同(这是您所查询的正确的语法):

var query = from o in db.Clubs 
      where o.ClubName == clubName 
      select o; 
+0

你是对的,但是(与其他答案不同)没有说明正确的语法。 – hvd 2012-07-25 07:58:05

+0

绝对正确。 :)这将使它回答3次相同的答案:P – albertjan 2012-07-25 07:59:54

+0

我的观点是,这不是一个答案。这是一条评论。 – hvd 2012-07-25 08:00:36

0

在ASP MVC剃刀,而我想:

@if (modelItem => item.Id == 1) 
{ 

<span class="badge progressbar-success">Approved</span> 

} 

不能转换lambda表达式键入'bool',因为它不是 委托类型

解决方案:

@if (Model.FirstOrDefault().Id == 1) 
{ 

<span class="badge progress-bar-success">Approved</span> 

} 

希望可以帮助别人。

相关问题