LINQ和唯一ID

时间:2011-04-06 11:40:07

标签: c# .net linq extension-methods

我已经编写了一些LINQ,在我添加新用户时,我会在数据库中检查用户名是否唯一。我的代码(见下文)有效,但是有更好的方法吗?如果用户名不存在,我目前正依赖于捕获错误。

try
        {
            var User = (from u in _database.Users
                        where u.UserID == strUserName
                        select u).First();

            if (User != null)
            {
                blnUnique = false;
            }
        }
        catch
        {
            blnUnique = false;
        }

3 个答案:

答案 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的方法。你的循环不能很好地扩展。