Как я сделал этот тест, чтобы не передавать выражение в хранилище, вместо этого выставить IQueryable, предоставив хранилищу интерфейс, такой как:
public interface IRepository<T>
{
IQueryable<T> All();
// whatever else you want
}
Легко реализуется так:
public IQueryable<T> All()
{
return session.Linq<T>();
}
Это означает, что вместо вызова вашего метода в хранилище, как:
var result = repository.FindBy(x => x.Id == 1);
Вы можете сделать:
var result = repository.All().Where(x => x.Id == 1);
Или синтаксис LINQ:
var result = from instance in repository.All()
where instance.Id == 1
select instance;
Тогда это означает, что вы можете пройти тот же тест, напрямую отключив хранилище, что должно быть проще. Вы просто заставляете насмехаться, чтобы вернуть список, который вы создали и который вызвал AsQueryable ().
Как вы указали, суть этого в том, чтобы позволить вам проверить логику ваших запросов без использования базы данных, что значительно замедлит их.