Linq + Reflection通过字段名称和条件从列表中获取元素

问题描述 投票:0回答:1

我有这样的课:

class SomeClass
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Age { get; set; }
    public DateTime Birthdate { get; set; }
}

我需要在列表中搜索满足条件的所有元素,例如。名称=='%th'

//Field name in this example can be:  "Id" , "Name" , "Age" ,"Birthdate"
List<SomeClass> Function(string fieldName, string searchedInfo)
{
    return list.Select(x => (fieldObtainedUsingReflection).Value.ToString().Contains(searchedInfo)).ToList();
}

我知道我可以这样做:

    switch(fieldName)
    {
      case "Id" : 
                 return list.Select(x=>x.Id.ToString().Contains(searchedInfo)).ToList(); 
      case "Name" :
                 return list.Select(x => x.Name.Contains(searchedInfo)).ToList();
     //.....

    }

但我想知道是否还有另一个更通用的实现。

使用LINQ和Reflection可以做到这一点吗?

如果可能的话,如果列表具有平均值,那么时间成本是多少。 30k元素?

谢谢

c# linq reflection
1个回答
0
投票

如评论中所述,您可以使用Expression,如下所示:

 public static List<SomeClass> SearchBy(this IEnumerable<SomeClass> items, Expression<Func<SomeClass, bool>> predicate)
        {
           return items.AsQueryable().Where(predicate).ToList();
        }

然后你就可以这样使用:

        var list = new List<SomeClass>();

        var result= list.SearchBy(x => x.Name.Contains("x"));
© www.soinside.com 2019 - 2024. All rights reserved.