Вам нужно использовать выражение, а не функцию.
Итак:
public async Task<IEnumerable<TEntity>> Where(Expression<Func<TEntity, bool>> predicate)
{
var tmp = await this.DbSet.Where(predicate).ToListAsync();
return tmp;
}
Func<TEntity, bool>
ожидает фактическую функцию, а Expression<Func<TEntity, bool>>
ожидает дерево выражений. IQueryable
строит ваш SQL-запрос на основе этого дерева выражений. Используя Func, вы вызываете перегрузку Where из обычного LINQ, которая возвращает IEnumerable. Который не имеет ToListAsync.
Я попытался бы заняться ими независимо.
Прежде чем Billy McCafferty записал резкую архитектуру, которую он записал, что я думаю, необходимость чтение на codeproject о лучших практиках с NHibernate. Кроме того, я только что обнаружил некоторый DimeCasts (Kyle Baley) под тегом MVC, которые очень хороши.
Rob Conery создал ряд видео Витрины MVC ASP.NET, который он пробегается через большое количество шаблонов и методов. Записанный бэкенд использует Linq для SQL, но может быть адаптирован с LinQ к NHibernate. Позже он также сделал видео ряд на TekPub - NHibernate с Ayende Rahien. Наконец (для NHibernate) существует Лето NHibernate
Сам источник дуги S# теперь идет с демонстрационными проектами также.
Наконец, существует Сервер Лагеря Кода, который создается с MVC.Net и NHibernate и использует в значительной степени каждый инструмент с открытым исходным кодом, о котором можно думать...
заметка на полях
Если Ваше заинтересованное избавлением от тех раздражающих XML-файлов при использовании NHibernate Вы могли бы также хотеть посмотреть на быстрый.
Это не полный пример приложения или что-либо, но это - вполне прилично разработанный ASP.NET платформа проекта MVC, записанная вокруг DDD/nHibernate и т.д.