Ответ 1
Метод расширения ToListAsync()
расширяет IQueryable<T>
, но ваш метод DistinctBy()
расширяет (и возвращает) IEnumerable<T>
.
Очевидно, что ToListAsync()
недоступен для IEnumerable<T>
, потому что он использует Linq-To-Objects (in-memory) и не может потенциально блокироваться (нет ввода-вывода).
Попробуйте это вместо:
public static IQueryable<T> DistinctBy<T, TKey>(this IQueryable<T> items, Expression<Func<T, TKey>> property)
{
return items.GroupBy(property).Select(x => x.First());
}
Обратите внимание, что я также изменил параметр property
с Func<>
на Expression<Func<>>
, чтобы соответствовать Queryable.GroupBy
(и избегать Enumerable.GroupBy
).
См. MSDN