3

我想根据电话号码获取联系人,但在 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...    
   };

编辑:

这是异常消息:

'where' 条件无效。实体成员正在调用无效的属性或方法。

4

4 回答 4

7

利用 :

phone = phone.Replace(" ", ""); // Replaces whitespace with empty string

这与您在 linq 表达式中所做的几乎相同。

于 2011-05-13T13:45:42.020 回答
0
String.Join("", yourString.Split(" "))

这将拆分字符串中任何位置的所有空格,并重新加入没有空格的结果数组。我相信这就是您正在寻找的。

于 2011-05-13T13:48:02.577 回答
0

将您的替换.Contains.Equals. 我不确定您的提供商是否支持String.Contains,但这可能会导致您的错误。尽管如此,将“0123 1234”归类为“231”的匹配项并没有多大意义。

于 2011-05-13T15:28:54.263 回答
0

不知道String.Replace是否或多或少有效,但是

new System.String(oldString.Where(x => !Char.IsWhiteSpace(x))); 

将去掉所有的空白字符。

于 2011-05-13T13:54:30.353 回答