Hi i want to create a list based on the search string using predicate expressions.
I have a list of type products contains different names.
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;
Now i want to filter the content based on user input.User will enter n no of strings with '+' as separator. After receiving the strings i will pass them to predicate object like this
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;
}
}
If i enter more than one string(sowmya+jane+john) its giving only the last string(john) result but i want a list of all matching strings
Please answer this question because i'm trying this but i couldn't get the result.
Please do some help thanks.
As I am not sure that predicate instance has an And method, I suggest you use this code:
You don't have to build a predicate here. You can try something like this
list2 will contain "kumar" and "ramya".
Initialize the predicate as false
You need to combine the predicates using
Or
Source for predicate builder here. It is part of LINQKit
Code, in case link goes