我開始爲樂趣這種擴展方法,但現在我發現自己陷了進去,如何在擴展方法中使用泛型類成員?
其實我想創建一個擴展方法來擴展LINQ,該方法將是這樣的:
books.In(b => b.Id, 1,2,3,4,5);
它將返回書籍ID範圍在第二params[]
,
它也可以做這樣的:
books.In(b => b.Title, "t1","t2","t3","t4","t5");
我想出的是這種方法(我今天知道表達式樹!):
public static List<TEntity> In<TEntity, TMember>(this List<TEntity> list,
Expression<Func<TEntity, TMember>> identifier, params TMember[] keys)
{
Type t = typeof(TEntity); //How to use reflection here?
List<TEntity> myList = list.Where(m => keys.Contains(m.));
return myList;
}
我的問題是如何訪問泛型類的成員:從identifier
表達即m.Id
或m.Title
? 我可以使用反射來實現這種情況嗎?
如果您想使用Enumerable.Where來過濾,'identifier'應該是'Func'。然後它就是'list.Where(m => keys.contains(identifier(m))''儘管您可能想要爲鍵創建一個集合以使查找效率更高。 –
Lee
如果意圖將其轉換爲SQL,那麼你應該使用'IQueryable'而不是'List'。 – juharr