我有这样的课:
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"));