我有代码检查数据库上的2个字符串。问题是它会忽略套管,所以abc123与ABC123相同,我不喜欢这样。我希望用户准确输入字符串。
这是我的代码:
public bool Consultant(string test, string test2)
{
return db.Consultants.Any(x => x.Test == test && x.Test2 == test2);
}
不使用查询,该方法为我生成一个。
答案 0 :(得分:2)
我假设此查询被转换为SQL,并且数据库使用不区分大小写的排序规则。
有几种方法可以解决这个问题。
将排序规则作为查询的一部分传递
您的ORM可能不支持此操作,如果索引使用不同的排序规则,它可能会阻止使用索引。
布拉德利·乌夫纳(Bradley Uffner)联系了一种为EF做这件事的方法:Case sensitive search using Entity Framework and Custom Annotation
数据库中的预过滤(不区分大小写)以有效减少结果数量。然后作为第二步过滤器严格使用LINQ到对象。
public bool Consultant(string test, string test2)
{
var candidates = db.Consultants.Where(x => x.Test == test && x.Test2 == test2);
return candidates.AsEnumerable().Any(x => x.Test == test && x.Test2 == test2);
}
如果使用这种方法,请不要忘记添加评论,因为这很难直观。
这种方式通常不如替代方案,所以如果它们可用,你应该更喜欢它们。
答案 1 :(得分:-1)
您需要执行区分大小写的搜索,如下所示:
public bool Consultant(string test, string test2)
{
return db.Consultants.Any(x => String.Compare(x.Test, test, false) == 0 && String.Compare(x.Test2, test2, false) == 0);
}