LINQ and unique IDs



我写了一些LINQ,当我添加新用户时,我检查数据库中的用户名是否唯一。我的代码(见下文)可以工作,但是是否有更好的方法来做到这一点?如果用户名不存在,我目前依赖于捕获错误。

try
        {
            var User = (from u in _database.Users
                        where u.UserID == strUserName
                        select u).First();
            if (User != null)
            {
                blnUnique = false;
            }
        }
        catch
        {
            blnUnique = false;
        }

您可以使用Enumerable.Any()扩展方法:

bool isUnique = (from u in database.Users
                 where u.UserID == userName
                 select u).Any();

这是另一种使用lambda来表达它的方法:

bool isUnique = database.Users.Any(u => u.UserID == userName);

注意,String类上的等号操作符将进行区分大小写的序号比较。如果希望进行不区分大小写的比较,则必须使用String。=方法:

bool isUnique = database.Users.Any(
    u => u.UserID.Equals(userName, StringComparison.OrdinalIgnoreCase));

使用FirstOrDefault()代替First()

_database是一个存储库吗?如果是这样,我建议在内部实现一个字典,这样就可以公开

FindUser(userID)

方法,如果没有找到userID则返回null。你的循环不能很好地伸缩

最新更新