我正在做一个项目,我遇到的情况是我需要从可查询的对象中“选择”数据。不幸的是,在编译时我不知道实际的可查询对象是什么类型。所以我试图通过反射调用“选择”方法。到目前为止我尝试过的代码如下。
....
.......
//suppose that I've got TSource and TResult at runtime.
Type argumentType = Model.GetArgumentType();
//get a queryable object from modle.
IEnumerable obj = Model.GetQueryableObject();
//looking for Select<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector);
var selectMethod = typeof(System.Linq.Enumerable)
.GetMethods(BindingFlags.Static | BindingFlags.Public)
.Where(mi => mi.Name == "Select" &&
mi.GetParameters()[1].ParameterType.GetGenericArguments().Count() == 2)
.Single()
.MakeGenericMethod(new Type[] { argumentType, argumentType });
//that is where I have no idea how to do it
var result = selectMethod.Invoke(null, new object[] { obj, **xxxxxx** });
....
...
谁能告诉我如何Func<TSource, TResult>
为 selectMethod 制作一个“”以通过反射调用“Select”方法?谢谢。
更新:
正如@Jon Skeet 提到的。示例代码中有几个错误。显然,我可能会以错误的方式问这个问题(绝对是我的错)。所以我决定修改原始问题以使其更清楚(或更糟)。希望有帮助。