使用“Expression <func <object,bool =”“>&gt;”</func <object,>

时间:2011-06-15 02:54:59

标签: entity-framework entity-framework-4 linq-to-entities

请查看以下代码段:

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 个答案:

答案 0 :(得分:2)

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

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

Func and Expression&gt;可以使用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"));