在Entity Framework中使用dynamic where子句

MCa*_*der 2 c# entity-framework data-access-layer

我正在尝试重新设计最初使用Raptier构建的数据访问层.Raptier生成接受where子句作为参数传递给存储过程的方法.我真的需要保留现有的mesthos签名,所以我的新DAL也需要接受where子句.我想使用更新的数据访问技术和技术,因此考虑使用.Net 4.0中的Entity Framework.

但是,看起来我不能接受动态where子句而不实现一些强烈的reoutines来将它们解析为lamba表达式.有没有我错过的东西?我是否对实体框架不满意?

谢谢,马克

Ste*_*ven 7

想到两个想法.

1).动态LINQ,允许您将运算符定义为字符串.

var result = Northwind.Products
    .Where("CategoryId=2 And UnitPrice>3")
    .OrderBy("SupplierId");
Run Code Online (Sandbox Code Playgroud)

2).使用某些东西EntityFilter<T>(参见此处的代码),它允许您定义这样的过滤器:

IEntityFilter<Person> entityFilter =
    from person in EntityFilter<Person>.AsQueryable()
    where person.Name.StartsWith("a")
    where person.Id < 100
    select person;
Run Code Online (Sandbox Code Playgroud)

您可以提供IEntityFilter<Person>能够过滤该查询的业务方法:

public static Person[] GetAllPersons(
    IEntityFilter<Person> filter)
{
    using (var db = ContextFactory.CreateContext())
    {
        IQueryable<Person> filteredList =
            filter.Filter(db.Persons);

        return filteredList.ToArray();
    }
}
Run Code Online (Sandbox Code Playgroud)