我有一个非常简单的帮助方法来生成唯一的代码。为了确保代码是唯一的,我执行一个LINQ to Entities查询来验证它尚未被使用。LINQ to Entities:不产生预期结果的所有方法
我在写这个方法的第一次尝试完美工作:
public string GenerateUniqueSignUpCode()
{
while(true)
{
var code = Path.GetRandomFileName().Substring(0, 6).ToUpper();
if(!Context.Users.Any(e => e.SignUpCode.ToUpper() == code))
return code;
}
}
然而,R#建议LINQ表达式可以简化,这就造成了这种方法:
public string GenerateUniqueSignUpCode()
{
while(true)
{
var code = Path.GetRandomFileName().Substring(0, 6).ToUpper();
if(Context.Users.All(e => e.SignUpCode.ToUpper() != code))
return code;
}
}
这改写原因一个无限循环。代码运行时数据库不包含任何6个字符的代码,所以它应该在第一次尝试时退出循环(就像显示的第一个方法一样)。
EF 4.3.1中是否全部坏了或发生了什么?
如果Jon的权利,这是R#错误重构,那么我建议你也向他们汇报。虽然我意识到可能很难发现当这样的条件被评估为SQL时! – Rup 2012-04-25 11:41:42
我想这是一个常见的情况,他们可能会考虑它 - 会增加一个问题,并看看会发生什么。 – 2012-04-25 12:51:39
问题补充:http://youtrack.jetbrains.com/issue/RSRP-297527 – 2012-04-25 13:03:21