在where子句C#中实现多个条件

时间:2014-07-12 09:25:26

标签: c# linq lambda listbox-control

情况:我在MainPage.xaml.cs中有一个搜索文本框的事件处理程序

    void src_textbox_TextChanged(object sender, TextChangedEventArgs e)
    {
        TextBox tb = sender as TextBox;

        listBoxTextItems.ItemsSource = App.ViewModel.Problems.Where(w => w.ProblemName.ToLower().Contains(tb.Text));

    }

listBoxTextItems:列表框控件的名称,
问题:在MainViewModelClass构造函数中实例化的集合名称,

此代码仅显示ProblemName属性包含在文本框中键入的字母的对象。

问题:我想要的是,此代码还应显示ProblemDesc属性包含在文本框中键入的字母的对象。

我试过这样的事情:

            listBoxTextItems.ItemsSource = App.ViewModel.Problems.Where((w => w.ProblemName.ToLower().Contains(tb.Text))||(w => w.ProblemDesc.ToLower().Contains(tb.Text)));

但我收到错误消息"运算符||无法应用于lambda expressionlambda expression类型的操作数。有谁能建议我正确的代码?

2 个答案:

答案 0 :(得分:2)

无论何时需要使用lambda参数,都不需要指定它。只需指定一次:

App.ViewModel.Problems.Where(w => w.ProblemName.ToLower().Contains(tb.Text) || 
                                  w.ProblemDesc.ToLower().Contains(tb.Text));

当你第二次指定w时,你正在创建一个新的lambda表达式,因此你得到了lambda表达式的错误语法。

(input parameters) => expression 

在这种情况下,您只有一个输入参数w,您只需指定一次,因此您将使用相同的参数并仅创建一个 lambda表达式,它将返回一个沸腾的结果。

您可以参考文档以获取有关lambda表达式的更详细说明:

答案 1 :(得分:1)

你差不多......

listBoxTextItems.ItemsSource = App.ViewModel.Problems.Where(w => w.ProblemName.ToLower().Contains(tb.Text) || w.ProblemDesc.ToLower().Contains(tb.Text));