我想根据电话号码获取联系人,但在动态Ms女士中,电话号码以各种格式存储,如123 45 678,12 34 56 78,0112345678,01 12345678等。
所以在进行比较之前我必须删除它们中的空格,我确实尝试在字符串上使用Replace方法,但这在运行时给了我一个Illegal方法错误。
我是否真的必须检索所有联系人并为比较做另一个循环,或者有没有办法在查询中“清理”字符串?
string phone = "12345678";
var contacts = from c in orgContext.CreateQuery<Contact>()
join a in orgContext.CreateQuery<Account>() on c.AccountId.Id equals a.AccountId
where (c.Telephone1.Replace(" ", "").Contains(phone) || c.MobilePhone.Replace(" ","").Contains(phone))
select new DynamicContact
{
ContactId = c.ContactId,
FirstName = c.FirstName,
LastName = c.LastName,
....and more...
};
编辑:
这是异常消息:
'where'条件无效。实体成员正在调用无效的属性或方法。
答案 0 :(得分:7)
使用:
phone = phone.Replace(" ", ""); // Replaces whitespace with empty string
它与你在linq表达式中所做的几乎相同。
答案 1 :(得分:0)
String.Join("", yourString.Split(" "))
这将拆分字符串中任何位置的所有空格,并重新加入生成的数组,不带空格。我相信这就是你要找的东西。
答案 2 :(得分:0)
不知道String.Replace是否效率更高或更低,但是
new System.String(oldString.Where(x => !Char.IsWhiteSpace(x)));
将删除所有空白字符。
答案 3 :(得分:0)
将.Contains
替换为.Equals
。我不确定您的提供商是否支持String.Contains
,但这可能会导致您的错误。尽管如此,将“0123 1234”归类为“231”的匹配并没有多大意义。