呼叫包含反射C#

时间:2015-10-28 14:00:24

标签: c# entity-framework

我想在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();
}

如何调用(字符串属性)。在这种情况下包含反射?

1 个答案:

答案 0 :(得分:0)

您可以通过

获取Contains方法
MethodInfo containsMethod = typeof(string).GetMethod("Contains");

然后使用MethodInfo Invoke

调用该方法
containsMethod.Invoke(stringValue, new object[] { value } );

其中stringValue是您通过p.GetType().GetProperty(s)

获得的内容

问候!