2012-07-25 189 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> 

} 

希望可以幫助別人。

相關問題