我想根据电话号码获取联系人,但在Ms Dynamics中,电话号码以各种格式存储,如123 45 678,12 34 56 78,0112345678,01 12345678等。
所以我必须在进行比较之前删除其中的空格,我确实尝试在字符串上使用 Replace 方法,但这在运行时给了我一个非法方法错误。
我真的必须检索所有联系人并执行另一个循环进行比较,还是有没有办法"清理"查询中的字符串?
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...
};
编辑:
这是异常消息:
无效的"位置"条件。实体成员正在调用无效的属性或方法。
使用 :
phone = phone.Replace(" ", ""); // Replaces whitespace with empty string
这与你在 linq 表达式中执行的操作几乎相同。
String.Join("", yourString.Split(" "))
这将拆分字符串中任意位置的所有空格,并重新加入没有空格的结果数组。我相信这就是你要找的。
不知道 String.Rereplace 的效率是多还是低,但是
new System.String(oldString.Where(x => !Char.IsWhiteSpace(x)));
将去除所有空格字符。
将.Contains
替换为 .Equals
。我不确定您的提供商是否支持 String.Contains
,但这可能会导致您的错误。尽管如此,将"0123 1234"归类为"231"的匹配项并没有多大意义。