Как создать предикат динамически

Привет, я хочу создать список на основе строки поиска с использованием выражений предиката.

У меня есть список типов продуктов, содержащих разные имена.

List<products> list1 = new List<products>();

        list1.Add(new products("sowmya"));
        list1.Add(new products("Jane"));
        list1.Add(new products("John"));
        list1.Add(new products("kumar"));
        list1.Add(new products("ramya"));
        listBox1.ItemsSource = list1;

Теперь я хочу отфильтровать контент на основе ввода пользователя . Пользователь вводит n строк с символом "+" в качестве разделителя. После получения строк я передам их объекту-предикату, подобному этому

 private void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
        List<products> list2 = new List<products>();
        Expression<Func<products, bool>> predicate = PredicateBuilder.True<products>();
        if (e.Key == Key.Enter)
        {
            string Searchstring = textBox1.Text.ToString().Trim();
            string[] separator = new string[] { "+" };
            string[] SearchItems=Searchstring.Split(separator,StringSplitOptions.None);
            foreach (string str in SearchItems)
            {
                string temp = str;
                predicate =p => p.Name.Contains(temp.ToLower());                   
            }

            list2 = list1.AsQueryable().Where(predicate).ToList();
            listBox1.ItemsSource = list2;
        }
    }

Если я введу более одной строки (sowmya + jane + john), это даст только результат последней строки (john), но мне нужен список всех совпадающих строк

Пожалуйста, ответьте на этот вопрос, потому что я пытаюсь это сделать, но не могу получить результат.

Пожалуйста, помогите, спасибо.

10
задан Sowmya 17 June 2011 в 12:02
поделиться