3
我正在開發一個項目,我遇到的情況是我需要從可查詢對象中「選擇」數據。不幸的是,我不知道編譯時實際可查詢對象的類型是什麼。所以我試圖通過反射來調用「select」方法。我到目前爲止試過的代碼如下。是否可以通過反射調用「Select」方法
....
.......
//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通過反射來調用「選擇」的方法?謝謝。
更新: 作爲@喬恩飛碟雙向提及。示例代碼中有幾處錯誤。顯然,我可能會以錯誤的方式提問(絕對是我的錯)。所以我決定修改原始問題以使其更清楚(或更糟糕)。希望有所幫助。
你見過動態LINQ嗎? –
你在那個'Func'中究竟想要什麼?它應該做什麼? – svick
Queryable是一個靜態類。你的意思是IQueryable?如果你從Enumerable中找到方法,你爲什麼要使用查詢? –