我有兩個存儲電話號碼的數據庫。第一個以15555555555(美國數字)格式存儲國家代碼,另一個可以以多種不同格式存儲它們(例如(555)555-5555,555555555,555-555-5555,555-5555等)。當電話號碼取消訂閱一個數據庫時,我需要取消訂閱其他數據庫中的所有對其的引用。使用正則表達式比較電話號碼的最佳方法
在第二個數據庫中找到與第一個數據庫中的號碼相匹配的電話號碼的所有實例的最佳方法是什麼?我正在使用實體框架。我的代碼現在看起來是這樣的:
using (FusionEntities db = new FusionEntities())
{
var communications = db.Communications.Where(x => x.ValueType == 105);
foreach (var com in communications)
{
string sRegexCompare = Regex.Replace(com.Value, "[^0-9]", "");
if (sMobileNumber.Contains(sRegexCompare) && sRegexCompare.Length > 6)
{
var contact = db.Contacts.Where(x => x.ContactID == com.ContactID).FirstOrDefault();
contact.SMSOptOutDate = DateTime.Now;
}
}
}
現在,我比較會檢查是否第一數據庫包含從第二數據庫中至少有7個數字的所有非數字字符被刪除了。
理想情況下,我希望能夠將正則表達式格式應用到代碼中從數據庫獲取數據的位置。起初,我想這一點,但我不能在LINQ查詢中使用替代:
var communications = db.Communications.Where(x => x.ValueType == 105 && sMobileNumber.Contains(Regex.Replace(x.Value, "[^0-9]", "")));
你可以看看這個[答](http://stackoverflow.com/a/123681)。 – HamZa
這很有幫助。在這一點上,我並沒有多少尋找最好的表達方式,而是像過濾它的最佳方式那樣。那有意義嗎? – ijb109
每個數字都有規範表示嗎? (在任何情況下,我的第一本能是使用計算列。) – user2864740