我有一個與Linq查詢對齊的if陳述句,以在我的應用程式中創建登錄,但是,代碼作業得不好,當查詢沒有選擇任何記錄時,.Count()等于零,它有意義,但在if中,代碼從未達到else部分,看,這是我的代碼:
var UserLogin = from m in _context. 用戶 where m.Username.Contains(this.Username) & m.Password.Contains(this.Password) select m.Username;
this.Username = string.Empty;
this.Password = string.Empty。
if(UserLogin.Count() != 0)
{
/HttpContext.Session.SetString("Username", UserLogin.First());
UsernameLogged = UserLogin.First();
}
else
{
Console.WriteLine("Sisa: "/span> UsernameLogged)。
this.Username = string.Empty。
this.Password = string.Empty。
UsernameLogged = string.Empty;
Console.WriteLine(UsernameLogged)。
uj5u.com熱心網友回復:
注意,該查詢被執行了兩次。第一次是在你呼叫UserLogin.Count()時。第二次是在你呼叫UserLogin.First()時。但是,你已經將Username和Password設定為string.Empty,所有的用戶名和密碼確實包含一個空字串,因為String.Contains只測驗字串的一部分是否匹配。所以你在結果中得到的是所有的用戶。使用==來測驗整個字串。
因為你只想得到一個用戶,所以使用FirstOrDefault,當沒有找到用戶時,它會回傳null。
var userLogged = _context.User
.FirstOrDefault(u => u.Username == Username && u.Password == Password)。
if (userLogged is null) {
Console.WriteLine("Sisa: "/span> UsernameLogged)。
Username = string.Empty;
密碼 = string.Empty;
UsernameLogged = string.Empty;
Console.WriteLine(UsernameLogged)。
} else {
UsernameLogged = userLogged.Username;
你正在將Username和Password設定為string.Empty兩次。如果你總是想這樣做,可以在if-else之后清除它們,或者只在沒有找到用戶時才這樣做。
uj5u.com熱心網友回復:
這是因為你正在使用LINQ查詢的延遲執行。你的查詢是在if條件下執行的,在那里你將得到計數1。
使用以下代碼 -
var UserLogin = from m in _context. 用戶 where m.Username.Contains(this.Username) & m.Password.Contains(this.Password) select m.Username;
var count = UserLogin.Count(); // Here your query will be execute.
this.Username = string.Empty。
this.Password = string.Empty。
if(count != 0)
{
/HttpContext.Session.SetString("Username", UserLogin.First());
UsernameLogged = UserLogin.First();
}
else
{
Console.WriteLine("Sisa: "/span> UsernameLogged)。
this.Username = string.Empty。
this.Password = string.Empty。
UsernameLogged = string.Empty;
Console.WriteLine(UsernameLogged)。
這將執行你的else條件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/310100.html
標籤:
