Linq就是这个字符串.比较查询效率低,是否有更好的方法?

Ano*_*use 2 linq entity-framework

本来我有这个方法:

public virtual User GetUser(string username)
        {
            return _db.Users.Single(x => x.UserName == username);
        }
Run Code Online (Sandbox Code Playgroud)

所以基本上是一个linq方法,它根据用户的用户名获取用户.

麻烦的是我发现有时用户名是在开头用大写字符来表示,所以它并不总是有效.

所以我想出了:

public virtual User GetUser(string username)
        {
            return _db.Users.Single(x => (string.Compare(x.UserName, username, true) == 0));
        }
Run Code Online (Sandbox Code Playgroud)

这有效.但是我得到这个字母必须非常低效.比较用户?

有没有更好的方法来写这个没有string.Compare?

Not*_*ple 7

String.Compare不在实体框架支持的函数列表中(请参阅支持的函数列表)这意味着当您执行此查询时,实体框架将检索执行此比较所需的整个数据集并在本地执行比较.这将非常缓慢.

更好的解决方案是使用==来比较字符串,例如:

return _db.Users.Single(x => x.UserName == username);
Run Code Online (Sandbox Code Playgroud)


Bar*_*xto 5

我会用String.Equals

\n\n
return _db.Users.Single(x => \n          String.Equals(x.UserName, username, StringComparer.OrdinalIgnoreCase))\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果我想将“Mart\xc3\xadn”与“martin”(重音)匹配,我会使用String.Compare.

\n\n
return _db.Users.Single(x => \n         string.Compare(x.UserName, username, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace);\n
Run Code Online (Sandbox Code Playgroud)\n


TGH*_*TGH 2

public virtual User GetUser(string username)
        {
            return _db.Users.Single(x => x.UserName.ToLower() == username.ToLower());

        }
Run Code Online (Sandbox Code Playgroud)

但我不认为比较会慢很多......