首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

LINQ 高效驗證用戶名唯一性:從遍歷到條件查詢的優化

     編輯:程式設計綜合問答

問題場景

ASP.NET 註冊頁面使用 CustomValidator 驗證用戶名是否已存在。原代碼將所有分類名稱查出來逐條比對,存在兩個嚴重缺陷:

  1. 查詢未加過濾條件,導致全表掃描,性能極差。
  2. args.IsValid 在循環內反覆賦值,最後一條記錄決定結果,邏輯錯誤。

優化方案一:LINQ 條件查詢

直接在數據庫層面過濾,僅返回匹配記錄:

var name0 = args.Value;
var c = from r in db.Category
        where r.Name == name0
        select r.Name;
args.IsValid = !c.Any();

Any() 會生成 EXISTS SQL,極其高效。

優化方案二:修正遍歷邏輯(不推薦)

若必須遍歷,應先假設有效,發現重複才標記無效並跳出:

args.IsValid = true;
foreach (var m in c) {
    if (args.Value.Equals(m.ToString())) {
        args.IsValid = false;
        break;
    }
}

總結

永遠優先使用數據庫原生過濾(Where、Any、Count),避免將大量數據拉取到應用層處理;驗證邏輯要「一次判定,早退出」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved