我开始为乐趣这种扩展方法,但现在我发现自己陷了进去,如何在扩展方法中使用泛型类成员?
其实我想创建一个扩展方法来扩展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