對於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();
林困惑的語句的第一部分。 「從_dp.cp_user中的u開始」。 到目前爲止,我一直在使用MySQL,所以它很迷惑地看到這個「來自你」。在MySQL中,這個「u」是指一個表。但在Linq im混淆了它的功能。
儘管我大致瞭解了其餘的聲明,但方法中的用戶名和密碼參數必須與表中的數據相同。並且它會返回數據庫對象。但是再次對你感到困惑,在最後一部分中說選擇你。
另一個問題我已經是在所謂的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以前使用過。如果有人能回答我所提出的三個問題,我將不勝感激,請耐心等待我的知識不足。
預先感謝
'你從_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。 –
具有'=>'語法的表達式是lambda表達式,就像內聯函數一樣。你可以閱讀關於他們[這裏](https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/lambda-expressions) –