使用Lambda表达式搜索电话号码

时间:2019-04-11 13:37:50

标签: c# lambda

我的数据库中有一个联系人表,其中的电话号码不遵循任何特定格式。例如,它们的格式可以为+1 (800) 111-2222,也可以仅为8001112222

我需要输入一个电话号码(例如从注册表中输入)并搜索我的联系人表,以查看该电话号码是否已经存在。当然,输入的电话号码也可以是任何格式,带或不带特殊字符。因此,我需要从表值和输入值中去除所有非数字字符,以便进行比较。我该怎么做?

我正在寻找这样的东西:

string inputPhoneNumber = "+1 (800) 111-2222";
MyContact existing = context.MyContacts
    .Where(u => stripChars(u.Phone) == stripChars(inputPhoneNumber))
    .FirstOrDefault();

stripChars()只是我想出的一种方法名称,它从给定的字符串中剥离所有非数字字符。

更新:我已经实现了stripChars()方法,如下所示:

public static string StripNonNumerical(string input)
{
    Regex numbers = new Regex(@"[^\d]");
    return numbers.Replace(input, "");
}

我可以在lambda表达式中使用此自定义方法吗?

2 个答案:

答案 0 :(得分:0)

最好的办法是从用户输入中剥离所有不是数字的输入,并对要搜索的值进行相同操作,然后进行比较。

答案 1 :(得分:0)

您可以将其重写为:

MyContact existing = context.MyContacts
    .FirstOrDefault(u => stripChars(u.Phone) == stripChars(inputPhoneNumber));

of,如果您只是想知道它是否存在:

if (context.MyContacts
    .Any(u => stripChars(u.Phone) == stripChars(inputPhoneNumber))

还是您在寻求有关stripChars()函数的建议?