Linq + Reflection通过字段名称和条件从列表中获取元素
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linq + Reflection通过字段名称和条件从列表中获取元素相关的知识,希望对你有一定的参考价值。
我有这样的课:
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元素?
谢谢
答案
如评论中所述,您可以使用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"));
以上是关于Linq + Reflection通过字段名称和条件从列表中获取元素的主要内容,如果未能解决你的问题,请参考以下文章
使用 Linq 、 Reflection 、 lambda 表达式系统地将 SqlParameters 添加到 SqlParameterCollection