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,你要匹配你想要的號碼,您可以更改此查詢的聯繫人。

相關問題