搜索具有多个条件的ListView?

时间:2019-04-19 08:56:20

标签: c# xamarin.forms

我正在使用一个包含工具的ListView n Xamarin.Forms。用户应该能够搜索工具类型和工具位置。如果您先输入两个搜索条件,我的代码就可以正常工作。之后,您可以执行新的搜索,而忽略例如工具位置,也可以正常工作。但是,如果您仅输入一个条件开始,则该应用程序将停止。对我来说没有任何意义,因为在同时输入两个条件后它似乎可以工作。谁能告诉我我在这里想念的东西吗?

private void Btn_Search_Clicked(object sender, EventArgs e)     
   {   
            var container = BindingContext as ToolViewModel;
            var searchValueToolDescription = SfEntry_ToolType.Text;
            var searchValueToolLocation = SfEntry_ToolLocation.Text;
            var searchValueToolPrice = SfEntry_ToolPrice.Text;

            listTools.BeginRefresh();

            listTools.ItemsSource = container.Tools.Where(i => 
            i.ToolDescription.Contains(searchValueToolDescription) && 
            i.ToolLocation.Contains(searchValueToolLocation));

        }

1 个答案:

答案 0 :(得分:0)

尝试将查询分为三种情况。单个查询可能有聪明的方法,但是它们的可读性较差

// desc and loc
if (!string.IsNullOrEmpty(searchValueToolDescription) && !string.IsNullOrEmpty(searchValueToolLocation)) {
    listTools.ItemsSource = container.Tools.Where(i => 
        i.ToolDescription.Contains(searchValueToolDescription) && 
        i.ToolLocation.Contains(searchValueToolLocation));
} 
// just desc
else if (!string.IsNullOrEmpty(searchValueToolDescription)) {
    listTools.ItemsSource = container.Tools.Where(i => 
        i.ToolDescription.Contains(searchValueToolDescription)); 
} 
// just loc
else if (!string.IsNullOrEmpty(searchValueToolLocation)) {
    listTools.ItemsSource = container.Tools.Where(i => 
        i.ToolLocation.Contains(searchValueToolLocation));
}