我想获取联系人中所有以特定3位数字开头的电话号码,例如当我按下按钮时为“ 012”。

我一直在使用以下代码进行处理:

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位数字匹配时才起作用。
任何想法如何实现这一目标?
顺便说一句,我是一个初学者。

最佳答案

如您所说,contacts 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开头的联系人。您可以根据需要更改此查询,以匹配所需的号码。

关于windows-phone-7 - 通过电话号码搜索联系人,并使用3位数前缀过滤,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29816421/

10-15 16:51