我正在运行以下查询:
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”。所以,它没有得到任何结果。
有没有办法查询和忽略名称中的空格?
另一方面,我可以忽略案例吗?
谢谢!
答案 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);