我正在尝试转换
x => x.SomeProperty
到
x => x.SomeProperty is ISomeInterface
在符合以下签名的方法中:
Func<TSource, bool> Convert(Expression<Func<TSource, TSourceMember>> source);
SomeProperty可能是集合或单个对象。有人可以帮忙吗?
我发现很难弄清楚这些是什么样的表达方式。我认为第一个是MemberExpression,第二个是UnaryExpression。
我很高兴移动
x.SomeProperty is ISomeInterface
逻辑到方法中,如果这会使事情变得更容易。
bool IsSomeInterface(object obj)
{
return obj is ISomeInterface;
}
关于如何将这些东西放在一起的任何指针或教程将不胜感激。我似乎总是在与表达树斗争。
答案 0 :(得分:2)
您可能正在寻找Expression.TypeIs(...)
。试试这个:
Func<TSource, bool> Convert<TSource, TSourceMember>(Expression<Func<TSource, TSourceMember>> source)
{
return (Func<TSource, bool>)(Expression.Lambda<Func<TSource, bool>>(Expression.TypeIs(source.Body, typeof(ISomeInterface)), source.Parameters).Compile());
}