0

我正在使用 MVC Web Api,我可以在其中获取我的 Windows 商店应用程序客户端中的项目列表。

我可以使用以下代码查看 Windows 商店应用程序上的项目列表:

    HttpClient client = new HttpClient();
    HttpResponseMessage response = await client.GetAsync("http://localhost:12345/api/items");

var sampleDataGroups = new List<SampleDataGroup>();


            if (response.IsSuccessStatusCode)
            {
                var content = await response.Content.ReadAsStringAsync();

                // CL: Parse 1 Item from the content
               var item = JsonConvert.DeserializeObject<dynamic>(content);
                //IEnumerable<string> item = JsonConvert.DeserializeObject<IEnumerable<string>>(content);

                foreach (var data in item)
                {
                      var dataGroup = new SampleDataGroup
                            (

                                (string)data.Id.ToString(),
                                (string)data.Name,
                                (string)"",
                                (string)data.PhotoUrl,
                                (string)data.Description

                            );
                                 sampleDataGroups.Add(dataGroup);
                }
             }
            else
            {
                MessageDialog dlg = new MessageDialog("Error");
                await dlg.ShowAsync();
            }


            this.DefaultViewModel["Groups"] = sampleDataGroups;

以这种json格式接收数据,即列表中每一项的数据

data    {
  "Id": 1,
  "Name": "bat",
  "Description": "lorem ipsum",
  "Price": 1.39,
  "Weight": "75g",
  "Photo": "test.png",
  "ItemList": null
}

dynamic {Newtonsoft.Json.Linq.JObject}

这映射到触控应用程序中的 SampleDataGroups 结构:

public class SampleDataGroup : SampleDataCommon
    {
        public SampleDataGroup()
        {

        }

        public SampleDataGroup(String uniqueId, String title, String subtitle, String imagePath, String description)
            : base(uniqueId, title, subtitle, imagePath, description)
        {
            Items.CollectionChanged += ItemsCollectionChanged;
        }
}

我想在我的 Windows 应用程序上创建一个搜索项功能,为此我通过添加一个文本框和按钮控件在 xaml 中创建了一个搜索工具。

<TextBox x:Name="SearchTB" VerticalAlignment="Top" Text="Search our Products"   Grid.Column="1"Width="420" Height="50" />

<Button x:Name="Product_Search" Content="Go" Grid.Column="2"  HorizontalAlignment="Left" VerticalAlignment="Top" Width="60" Height="50" Margin="0 0 0 0" Click="Product_Search_Click" />

我想使用 linq 查询来获取并返回与单击按钮时在文本框中输入的字符串匹配的所有项目。

当单击按钮时,我在下面创建了此函数。该string query参数是在文本框中输入的字符串。应返回与在文本框中输入的字符串相似的任何项目。

private void Item_Search_Click(object sender, RoutedEventArgs e)
{
       var querystr = SearchTB.Text; 

}

如何使用 Linq 使用在搜索文本框中输入的字符串获取单击按钮时要显示的项目列表?

4

1 回答 1

0

您可能应该执行以下操作:

private void Item_Search_Click(object sender, RoutedEventArgs e)
{
    var groups =  DefaultViewModel["Groups"] as IEnumerable<SampleDataGroup>;
    if (groups == null) 
        return;

    DefaultViewModel["FilteredGroups"] =
       groups 
            .Where(group => ContainsQueryString(group. Title, Search.Text))
            .ToList();
}

private static bool ContainsQueryString(string property, string query)
{
    //performs comparison based on the current UI culture, case insensitive
    //from here: http://stackoverflow.com/questions/444798/case-insensitive-containsstring
    return CultureInfo.CurrentUICulture.CompareInfo.IndexOf(property, query, CompareOptions.IgnoreCase) >= 0;
}
于 2013-10-27T15:03:32.140 回答