使用PredicateBuilder问题在列表中搜索 [英] Search in list using PredicateBuilder problem
问题描述
大家好。
我正在尝试创建动态谓词,以便它可以用于过滤列表
我有一个类:
Hi all.
I am trying to create dynamic predicate so that it can be used against a list for filtering
I have a class:
public class MyClass
{
public string Name { get; set; }
public string Address { get; set; }
}
和IList< myclass> data = new List< myclass>();
我想通过名称或地址,名称或地址类似输入搜索我的数据(例如:input = t %g)。
名称喜欢输入或地址喜欢输入
这是我的帮手
And IList<myclass> data = new List<myclass>();
I want to search in my data by Name Or Address, and Name or Address Like input(ex: input=t%g).
Name Like input Or Address Like input
Here is my helper
public static Expression<Func<T, bool>> StringLike<T>(Expression<Func<T, string>> selector, Expression<Func<T, string>> selector1, string pattern)
{
var predicate = PredicateBuilder.True<T>();
var predicate1 = PredicateBuilder.True<T>();
var parts = pattern.Split('%');
if (parts.Length == 1) // not '%' sign
{
predicate = predicate.And(s => selector.Compile()(s) == pattern);
predicate1 = predicate1.And(s => selector1.Compile()(s) == pattern);
}
else
{
for (int i = 0; i < parts.Length; i++)
{
string p = parts[i];
if (p.Length > 0)
{
if (i == 0)
{
predicate = predicate.And(s => selector.Compile()(s).StartsWith(p));
predicate1 = predicate1.And(s=>selector1.Compile()(s).StartsWith(p));
}
else if (i == parts.Length - 1)
{
predicate = predicate.And(s => selector.Compile()(s).EndsWith(p));
predicate1 = predicate1.And(s => selector1.Compile()(s).EndsWith(p));
}
else
{
predicate = predicate.And(s => selector.Compile()(s).Contains(p));
predicate1 = predicate1.And(s => selector1.Compile()(s).Contains(p));
}
}
}
}
var test = Expression.Lambda<Func<T, bool>>(Expression.Or(predicate, predicate1));
return test;
}
主要功能:
In main function:
var expr = ExpressionHelper.StringLike<myclass>(x => x.Name,x=>x.Address, text);
data = data.Where(expr.Compile()).ToList();
我遇到以下异常:
二进制运算符Or未定义类型'System.Func`2 [ConsoleApplication1.Program + MyClass,System.Boolean]'和'System.Func`2 [ConsoleApplication1.Program + MyClass ,System.Boolean]'。
任何帮助表示赞赏!谢谢! :)
I run into the following exception:
The binary operator Or is not defined for the types 'System.Func`2[ConsoleApplication1.Program+MyClass,System.Boolean]' and 'System.Func`2[ConsoleApplication1.Program+MyClass,System.Boolean]'.
Any help is appreciated! Thanks! :)
推荐答案
请帮帮我。
非常感谢你。
please help me.
Thanks you very much.
这篇关于使用PredicateBuilder问题在列表中搜索的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!