我想扫描一个类型的属性和带注释的属性,并返回一个具有以下结构的对象
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)
我的问题是,我如何以某种方式修改查询 *
答案 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,
};