运行查询时如何处理人名中的空格

时间:2014-01-20 18:20:00

标签: c# linq

我正在运行以下查询:

if (!string.IsNullOrWhiteSpace(accountHolderName))
{
  Customer  cust = _entities.Customers.FirstOrDefault(c => c.AccountId == acct.AccountId &&
                                                     c.CorporationId == token.CorporationId &&
                                                     c.Name.ToUpper().StartsWith(accountHolderName.ToUpper()));
}

我正在搜索的记录名称为“MC CARTAN”。

客户实际投入的是“MCCARTAN”。所以,它没有得到任何结果。

有没有办法查询和忽略名称中的空格?

另一方面,我可以忽略案例吗?

谢谢!

5 个答案:

答案 0 :(得分:1)

LINQ to Entities supports string.Replace() instance method,您可以尝试以下操作:

c.Name.Replace(" ", "").ToUpper().StartsWith(accountHolderName.ToUpper())

答案 1 :(得分:1)

您可以在数据库中创建一个例程来规范化名称,例如删除所有空格和C#中相应的空格,然后比较规范化版本。

Customer  cust = _entities.Customers.FirstOrDefault(c => c.AccountId == acct.AccountId &&
                                                 c.CorporationId == token.CorporationId &&
                                                 c.Name.Normalize().StartsWith(Normalize(accountHolderName));

This link讨论数据库中的自定义函数。

如果您需要对名称进行的清理仅限于LINQ在数据库中已经支持的简单字符串操作,那么您可以像其他答案一样建议并使用它们。我试图解决字符串操作不那么简单的情况

答案 2 :(得分:1)

您的代码应该已经处理了大小写(使用ToUpper),通过使用Replace函数替换没有空格的空格,它也应该处理它。

 if (!string.IsNullOrWhiteSpace(accountHolderName))
    {
      Customer  cust = _entities.Customers.FirstOrDefault(c => c.AccountId == acct.AccountId &&
                                                         c.CorporationId == token.CorporationId &&
                                                         c.Name.Replace(" ","").ToUpper().StartsWith(accountHolderName.Replace(" ","").ToUpper()));
    }

答案 3 :(得分:1)

尝试使用

accountHolderName.Replace(" ", "%").ToUpper()

答案 4 :(得分:0)

如果你想忽略所有空格,那么你可能应该替换它们:

name = name.Replace(" ", "");

要忽略这种情况,那么你应该这样做:

name.Equals(other_name, StringComparison.InvariantCultureIgnoreCase);