在 LINQ 中使用 PropertyInfo 对象查询集合

Posted

技术标签:

【中文标题】在 LINQ 中使用 PropertyInfo 对象查询集合【英文标题】:Query a collection using PropertyInfo object in LINQ 【发布时间】:2012-07-11 11:21:25 【问题描述】:

我有一个带有这样签名的方法

void RefreshMethod<T>(IEnumerable<T> lst, string propertyName) where T:class

   Type type = typeof(T);
   PropertyInfo property = type.GetProperties().Single(u => u.Name == primaryKeyProperty);
  //query goes here

现在我想查询该集合以获取其所有值

属性名称

在一个简单的场景中,就这么简单

lst.where(u=>u.ID<0)

但这里我没有那个 ID 属性,但有相应的“PropertyInfo”对象。

我应该如何做到这一点。

请指导

【问题讨论】:

【参考方案1】:

您可以使用property.GetValue(anObjectOfTypeT, null) 查找属性值。

比如:

var refreshedList =  lst.Where(l => ((int)(property.GetValue(l, null)) < 0).ToList();

这假定属性将始终是 int 类型。

【讨论】:

太棒了,正是我需要的:) 对于其他类型的房产有没有办法做到这一点? @Scar 你是什么意思,字符串类型的属性,或双精度,或其他类型的属性?您可以将转换为int,但您需要事先知道类型。 @Maarten 我的意思是,如果我必须为不同类型的多个属性执行此操作,除了为每个数据类型创建不同的 var 之外,还有其他方法吗?

以上是关于在 LINQ 中使用 PropertyInfo 对象查询集合的主要内容,如果未能解决你的问题,请参考以下文章

反射PropertyInfo的简单使用

获取 PropertyInfo 的递归例程

有没有办法从该属性的 getter 中获取 PropertyInfo?

如何将PropertyInfo转换为属性表达式并使用它来调用泛型方法?

反思:如何通过PropertyInfo获取类对象

巧用PropertyInfo简化和改善代码