【发布时间】:2016-12-07 14:16:32
【问题描述】:
我开始这个扩展方法是为了好玩,但现在我发现自己陷入其中,
其实我想创建一个扩展方法来扩展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?
我可以使用反射来实现这一点吗?
【问题讨论】:
-
identifier应该是Func<TEntity, TMember>如果您想使用Enumerable.Where进行过滤。然后它只是list.Where(m => keys.Contains(identifier(m))尽管您可能希望为键创建一个集合以提高查找效率。 -
如果打算将此转换为 SQL,那么您应该使用
IQueryable而不是List。
标签: c# linq generics reflection extension-methods