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?
String.Compare不在实体框架支持的函数列表中(请参阅支持的函数列表)这意味着当您执行此查询时,实体框架将检索执行此比较所需的整个数据集并在本地执行比较.这将非常缓慢.
更好的解决方案是使用==来比较字符串,例如:
return _db.Users.Single(x => x.UserName == username);
Run Code Online (Sandbox Code Playgroud)
我会用String.Equals
return _db.Users.Single(x => \n String.Equals(x.UserName, username, StringComparer.OrdinalIgnoreCase))\nRun Code Online (Sandbox Code Playgroud)\n\n如果我想将“Mart\xc3\xadn”与“martin”(重音)匹配,我会使用String.Compare.
return _db.Users.Single(x => \n string.Compare(x.UserName, username, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace);\nRun Code Online (Sandbox Code Playgroud)\n
public virtual User GetUser(string username)
{
return _db.Users.Single(x => x.UserName.ToLower() == username.ToLower());
}
Run Code Online (Sandbox Code Playgroud)
但我不认为比较会慢很多......
| 归档时间: |
|
| 查看次数: |
8833 次 |
| 最近记录: |