我已经编写了一些LINQ,在我添加新用户时,我会在数据库中检查用户名是否唯一。我的代码(见下文)有效,但是有更好的方法吗?如果用户名不存在,我目前正依赖于捕获错误。
try
{
var User = (from u in _database.Users
where u.UserID == strUserName
select u).First();
if (User != null)
{
blnUnique = false;
}
}
catch
{
blnUnique = false;
}
答案 0 :(得分:3)
您可以使用Enumerable.Any<TSource>()扩展名方法:
bool isUnique = (from u in database.Users
where u.UserID == userName
select u).Any();
以下是使用lambda:
表达此选项的另一种方式bool isUnique = database.Users.Any(u => u.UserID == userName);
请注意equals operator on the String class将进行区分大小写的序数比较。如果您希望进行不区分大小写的比较,则必须使用String.Equals方法:
bool isUnique = database.Users.Any(
u => u.UserID.Equals(userName, StringComparison.OrdinalIgnoreCase));
答案 1 :(得分:1)
使用FirstOrDefault()而不是First()
答案 2 :(得分:0)
_database是一个存储库吗?如果是这样,我会建议在内部实现一个字典,以便您可以公开
FindUser(userID)
如果未找到userID,则返回null的方法。你的循环不能很好地扩展。