我想在DbSet上搜索一个参数名称和一个值的数组。解释一下:
我有一个通用存储库:Repository<T>
,其中T是一个实体。
我需要实现此方法:IEnumerable<T> Find(string[] propertiesName, string value);
所以,使用PredicateBuilder,我可以这样做:
IQueryable<Product> SearchProducts (string[] keywords)
{
var predicate = PredicateBuilder.False<Product>();
foreach (string keyword in keywords)
{
string temp = keyword;
predicate = predicate.Or (p => p.Description.Contains (temp));
}
return dataContext.Products.Where (predicate);
}
很好,这是我想要的,但是,这有一个特殊的类型,我需要做通用,像这样:
IEnumerable<T> Find(string[] propertiesName, string value){
var predicate = PredicateBuilder.False<T>();
foreach(string s in propertiesName){
predicate = predicate.Or(p => p.GetType().GetProperty(s).(call contains)(value);
}
return DbSet<T>.Where(predicate).ToList();
}
如何调用(字符串属性)。在这种情况下包含反射?
答案 0 :(得分:0)
您可以通过
获取Contains
方法
MethodInfo containsMethod = typeof(string).GetMethod("Contains");
然后使用MethodInfo Invoke
containsMethod.Invoke(stringValue, new object[] { value } );
其中stringValue
是您通过p.GetType().GetProperty(s)
问候!