字符串“nfnfn"匹配“nFnFN"并返回真-我希望它返回假

本文关键字:返回 quot 我希望 nFnFN nfnfn 匹配 字符串 | 更新日期: 2023-09-27 18:14:34

我有代码检查数据库上的2个字符串。问题是它将忽略大小写,所以abc123将与abc123相同,我不喜欢这样。我希望用户准确地输入字符串。

我的代码:

public bool Consultant(string test, string test2)
{
    return db.Consultants.Any(x => x.Test == test && x.Test2 == test2);
}

不使用查询,该方法正在为我生成一个。

字符串“nfnfn"匹配“nFnFN"并返回真-我希望它返回假

我假设这个查询被翻译成SQL,并且数据库使用不区分大小写的排序。

有几种方法可以解决这个问题。

  1. 更改数据库定义以使用区分大小写的排序规则。
  2. 传递排序规则作为查询的一部分

    你的ORM可能不支持这个,如果索引使用不同的排序规则,它可能会阻止使用索引。

    Bradley Uffner链接了EF:使用实体框架和自定义注释区分大小写搜索的方法

  3. 在数据库中预过滤(不区分大小写),有效减少结果的数量。然后作为第二步过滤器,严格使用LINQ-to-objects。

    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);
    }
    

    如果使用这种方法,不要忘记添加注释,因为这很难直观。

  4. 这种方法通常不如其他方法,所以如果有可用的方法,您应该选择它们。

您需要进行大小写敏感的搜索,如下所示:

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);
}
相关文章: