使用linq查询对象的属性

时间:2011-03-04 13:56:57

标签: linq attributes query-optimization propertyinfo

我想扫描一个类型的属性和带注释的属性,并返回一个具有以下结构的对象

public class PropertyContext
{
    public object PropertyValue { get; set; }

    public object SourceType { get; set; }

    public Attribute Annotation { get; set; }
}

我有这个查询

var query = from property in _target.GetType().GetProperties()
            from attribute in Attribute.GetCustomAttributes(property, true)
            select new PropertyContext
            {
                Annotation = attribute,
                SourceType = _target,                                            
             };

这是延迟执行的,因此我只在调用方法需要时生成PropertyContext


现在我要填充PropertyValue对象的PropertyContext属性。

要获取属性的值,我已经调用了其他组件,如

_propertyValueAccessor.GetValue(_target, property)  

我的问题是,我如何以某种方式修改查询 *

  • 该值仅读取一次
  • 但仅限于创建PropertyContext

1 个答案:

答案 0 :(得分:3)

怎么样:

var query = from property in _target.GetType().GetProperties()
            let attributes = Attribute.GetCustomAttributes(property, true)
            where attributes.Any()
            let val = _propertyValueAccessor.GetValue(_target, property)  
            from attribute in attributes
            select new PropertyContext
            {
                PropertyValue = val,
                Annotation = attribute,
                SourceType = _target,
            };