3

我想要获取我的联系人中以特定3位数字开头的所有电话号码,例如,当我点击按钮时显示“012”。通过电话号码搜索联系人,使用3位数字前缀进行过滤

,我一直在努力使用下面的代码:

private void ButtonContacts_Click(object sender, RoutedEventArgs e) 
{ 
    Contacts cons = new Contacts(); 

    //Identify the method that runs after the asynchronous search completes. 
    cons.SearchCompleted += new EventHandler<ContactsSearchEventArgs>(Contacts_SearchCompleted); 

    //Start the asynchronous search. 
    cons.SearchAsync("0109", FilterKind.PhoneNumber, "State String 5"); 
} 


void Contacts_SearchCompleted(object sender, ContactsSearchEventArgs e) 
{ 
    try 
    { 
     //Bind the results to the user interface. 
     ContactResultsData.DataContext = e.Results; 
    } 
    catch (System.Exception) 
    { 
     //No results 
    } 

    if (ContactResultsData.Items.Any()) 
    { 
     ContactResultsLabel.Text = "results"; 
    } 
    else 
    { 
     ContactResultsLabel.Text = "no results"; 
    } 
} 

FilterKind.PhoneNumber只有当它具有至少最后6位数字的电话号码的匹配工作。
任何想法如何实现这一目标?
顺便说一声我是一个初学者。

回答

1

正如你所说,如果最后六位数字相同,联系人api的过滤器才会匹配,您可以在documentation中看到它,所以您无法使用它。

在我看来,最好的办法是收到所有的联系人列表,然后使用LINQ找到你想要的联系人。

private void ButtonBase_OnClick(object sender, RoutedEventArgs e) 
{ 
    var contacts = new Contacts(); 
    contacts.SearchCompleted += Contacts_SearchCompleted; 
    contacts.SearchAsync(null, FilterKind.None, null); 
} 

void Contacts_SearchCompleted(object sender, ContactsSearchEventArgs e) 
{ 
    var results = e.Results.ToArray(); 
    var myContacts = results.Where(c => c.PhoneNumbers.Any(p => p.PhoneNumber.StartsWith("66"))).ToArray(); 
} 

您可以在最后一行看到查询发现,他们的一些数字开始66,你要匹配你想要的号码,您可以更改此查询的联系人。

相关问题