3

電話番号に基づいて連絡先を取得したいのですが、Ms Dynamics では、電話番号は 123 45 678、12 34 56 78、0112345678、01 12345678 などのあらゆる種類の形式で保存されています。

そのため、比較を行う前にスペースを削除する必要があります。文字列で Replace メソッドを使用しようとしましたが、実行時に Illegal method エラーが発生しました。

本当にすべての連絡先を取得して、比較のために別のループを実行する必要がありますか? または、クエリ内の文字列を "クリーン" にする方法はありますか?

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

.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 に答える
0
String.Join("", yourString.Split(" "))

これにより、文字列内のすべてのスペースで分割され、結果の配列がスペースなしで再結合されます。私はこれがあなたが探しているものだと信じています。

于 2011-05-13T13:48:02.577 に答える