【问题标题】:Remove spaces in string before comparison在比较之前删除字符串中的空格
【发布时间】:2011-05-13 13:41:27
【问题描述】:

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

编辑:

这是异常消息:

“位置”条件无效。实体成员正在调用无效的属性或方法。

【问题讨论】:

    标签: c# linq linq-to-entities dynamics-crm dynamics-crm-online


    【解决方案1】:

    使用:

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

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

    【讨论】:

    • 不知道为什么我没有首先想到这个。我猜太明显了:)
    • 不是输入(电话)有空格,而是在数据库中
    • 尝试:哪里 (c.Telephone1.Replace(" ", "") == phone) || (c.MobilePhone.Replace(" ", "") == phone)
    【解决方案2】:
    String.Join("", yourString.Split(" "))
    

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

    【讨论】:

      【解决方案3】:

      不知道String.Replace的效率高还是低,但是

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

      将去掉所有的空白字符。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-01-10
          • 2011-07-25
          • 2016-04-26
          • 2013-02-01
          • 2023-01-31
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多