实体框架 - "Expression<Func<Object, bool>>"的用法



请查看以下片段:

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)

有人能提供一些具体的例子来说明如何用实际的查询实际调用第二个方法吗?

谢谢!

让所有部门的销售额超过100美元

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

Func和Expression>都可以使用lambda语法以相同的方式声明。

事实上,在您链接到的文章中(在最后一个代码片段中)已经有一个例子。

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"));

最新更新