Использование "Экспрессии">» - PullRequest
1 голос
/ 15 июня 2011

пожалуйста, взгляните на следующий фрагмент:

public IEnumerable<T> Query(Expression<Func<T, bool>> filter)
{
    return filter != null ? this.ObjectSet.Where(filter) : null;
}

Как например:

public IQueryable<Department> Query(Expression<Func<Department, bool>> filter)
{
    return _context.Departments.Where(filter);
}

(первоисточник: http://blogs.microsoft.co.il/blogs/gilf/archive/2010/06/21/revisiting-the-repository-and-unit-of-work-patterns-with-entity-framework.aspx)

Может ли кто-нибудь привести конкретные примеры того, как на самом деле вызвать второй метод с фактическим запросом?

Спасибо!

1 Ответ

2 голосов
/ 15 июня 2011

Скажем, получить все отделы с продажами более $ 100

var deparments = deparmentsRepository.Query(d => d.TotalSales > 100.0m);

Func и Expression> могут быть объявлены одинаково с использованием лямбда-синтаксиса.

На самом деле в статье (в последнем фрагменте кода) есть пример, на который вы уже ссылались.

foreach(var department in uow.Departments.Query(d => d.Budget > 150000)) { ... }

Учитывая, что Query возвращает IQueryable, нет причин, по которым вы не можете встраивать в более сложные запросы.

var deparments = deparmentsRepository.Query(d => d.TotalSales > 100.0m)
    .Select(d => new { ... });

Предполагается, что у менеджера и отдела есть внешний ключ, который вам не нужен.

var deparments = deparmentsRepository.Query(d => d.Manager.Name.StartsWith("A"));
...