2017-08-08 30 views
2

對於C#,Entity Framework和Linq,我希望有人能夠在關於LINQ的代碼中解釋一些東西。我的程序中有一個方法從表中選擇一個用戶。該方法是:在C#/實體框架中的LINQ表達式

public static cp_user SelectUser(string user, string passw) 
    { 
     try 
     { 
      cp_user entityUser = (from u in _db.cp_user 
            where u.username == user && u.password == passw 
            select u).FirstOrDefault(); 

      return entityUser; 
     } 
     catch (System.Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 

     return null; 
    } 

cp_user是對應於我在我的數據庫中的表的類。而_db是一個保存對數據庫實例的引用的字段。

在選擇用戶方法我明白,有類型cp_user的局部變量的創建,它是由該語句定義:

(from u in _db.cp_user 
           where u.username == user && u.password == passw 
           select u).FirstOrDefault(); 
  1. 林困惑的語句的第一部分。 「從_dp.cp_user中的u開始」。 到目前爲止,我一直在使用MySQL,所以它很迷惑地看到這個「來自你」。在MySQL中,這個「u」是指一個表。但在Linq im混淆了它的功能。

  2. 儘管我大致瞭解了其餘的聲明,但方法中的用戶名和密碼參數必須與表中的數據相同。並且它會返回數據庫對象。但是再次對你感到困惑,在最後一部分中說選擇你。

另一個問題我已經是在所謂的checkany另一種方法,它檢查用戶登錄正確的是:

public static bool CheckAny(string user, string passw) 
    { 
     bool itIsAlredy = _db.cp_user.Any(u => u.username == user && u.password == passw); 
     return itIsAlredy; 
    } 

我明白,它需要在用戶名和密碼,並創建一個布爾變量,根據陳述可以返回true或false。這是我不瞭解的部分。

  • 對於我這個語句 「(U => u.username ==用戶& & u.password == PASSW);」看起來像這意味着方法參數中的用戶名和密碼必須存在於數據庫中。但是有學校的人告訴我,這意味着用戶名和密碼必須正確對應;您不能擁有連接到其他用戶名的密碼。那麼這個聲明實際上說了些什麼?而且我也不明白整個「u => u.username」。像這個你代表什麼。它是特殊的linq語法,如果是這意味着什麼?
  • 如果我有任何錯誤的陳述,請糾正我,如果我有新的編程,一般只在MySQL以前使用過。如果有人能回答我所提出的三個問題,我將不勝感激,請耐心等待我的知識不足。

    預先感謝

    +0

    '你從_db.cp_user中的u所在的位置u.username == user && u.password == passw選擇u'類似於'Select * from _db.cp_user WHERE username == user && password == passw'。 _db.cp_user中的'from u'將'u'定義爲_db.cp_user表中的一行。然後它比較行的用戶名和密碼屬性,如果它們符合條件,則選擇該行(所以這些列需要存在於表中)。這是爲所有行完成的,並且它們作爲IEnumerable返回,那麼'FirstOrDefault'返回第一行或null。 –

    +0

    具有'=>'語法的表達式是lambda表達式,就像內聯函數一樣。你可以閱讀關於他們[這裏](https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/lambda-expressions) –

    回答

    0
    1. 從u在_db.cp_user很簡單。就像foreach循環一樣,你正在定義一個集合中的一個項目。u是項目,_db.cp_user是集合,它只是循環訪問集合,u是給定項目的句柄。

    2. select u只是返回集合中的特定項目。

    3. U => u.username只是檢查,以查看是否具有用戶名的一個屬性的U對象(即時猜測用戶)是等於傳遞到方法的用戶字符串參數的