Я начал этот метод расширения для удовольствия, но теперь я считаю себя застрял в ней,Как работать с членами типа Generic в методе расширения?
На самом деле я хочу, чтобы создать метод расширения для расширения 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;
}
моей проблема заключается в том, чтобы получить доступ к непатентованным членам класса: то есть m.Id
или m.Title
из выражения identifier
? Могу ли я использовать отражение, чтобы это произошло?
'идентификатор' должен быть' Func ', если вы хотите использовать' Enumerable.Where' для фильтрации. Тогда это просто «list.Where» (m => keys.Contains (идентификатор (m)) », хотя вы можете захотеть создать набор ключей, чтобы сделать поиск более эффективным. –
Lee
Если намерение заключается в том, чтобы это было переведено в SQL, тогда вы должны использовать 'IQueryable' вместо' List'. – juharr