【发布时间】:2014-04-16 09:13:37
【问题描述】:
我有两个存储电话号码的数据库。第一个以 15555555555(美国号码)格式存储它们的国家代码,另一个可以以多种不同格式存储它们(例如 (555) 555-5555、5555555555、555-555-5555、555-5555 , ETC。)。当一个电话号码在一个数据库中退订时,我需要在另一个数据库中退订对它的所有引用。
在第二个数据库中查找与第一个数据库中的号码匹配的所有电话号码实例的最佳方法是什么?我正在使用实体框架。我现在的代码如下所示:
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]", "")));
【问题讨论】:
-
你可以看看这个answer。
-
这很有帮助。在这一点上,我不是在寻找最好的表达方式,而是在寻找过滤它的最佳方式。这有意义吗?
-
每个数字都有规范表示吗? (无论如何,我的第一反应是使用计算列。)
-
没有。第二个数据库可以包含 value 列中的任何内容。当我今天查看一个数据库时,它甚至包含值“djahdh”。我查看了计算列,如下所示:stackoverflow.com/questions/15655813/…