我正在学习“表达式树”,但我无法执行以下表达式:
但是我遇到了这个错误: InvalidOperationException: 在类型“System.Linq.Enumerable”上没有泛型方法“Select”与提供的类型参数和参数兼容。如果该方法是非泛型方法,则不应提供任何类型参数。 关于“第二种情况”,我不知道该如何继续。
有人能在这里指导我吗?
// first case
someList.Select(p => p.SomeProperty);
并且
// second case
someList.Select(p => new OtherClass
{
SomeProperty = p.SomeProperty
})
对于“第一个案例”,我尝试做了以下操作:
var someList = new List<SomeClass>();
someList.Add(new SomeClass { SomeProperty = "Hello" });
var someParam = Expression.Parameter(typeof(SomeClass), "p");
var someProperty = Expression.Property(someParam, "SomeProperty");
Expression.Call(
typeof(Enumerable),
"Select",
new Type[]
{
typeof(SomeClass),
typeof(string)
},
Expression.Lambda(
someProperty,
someParam
)
).Dump();
但是我遇到了这个错误: InvalidOperationException: 在类型“System.Linq.Enumerable”上没有泛型方法“Select”与提供的类型参数和参数兼容。如果该方法是非泛型方法,则不应提供任何类型参数。 关于“第二种情况”,我不知道该如何继续。
有人能在这里指导我吗?
Expression.Call
中的new Type[]
和Expression.Lambda
之间提供IEnumerable<SomeClass>
参数。 - WillEnumerable.*
方法。你必须.Compile()
它们,或者使用IQueryable<>
和Queryable.*
方法。 - xanatos