使用动态查询构建功能创建数据访问层

时间:2013-05-09 10:11:48

标签: c# entity-framework architecture repository-pattern query-builder

我在数据访问层中使用Entity Framework,我需要支持通过UI构建动态查询(例如(Name == "John" AND Age > 25).TOP(100).ORDERBY(LastName))。

我打算使用QueryBuilder来创建动态查询。为此,我正在考虑创建如下结构:

  1. 我的“商家实体”层中的FilterCondition课程,其中包含Name is equal to John等条件。
  2. FilterConditionsToQuery某处,使用List<FilterCondition>QueryBuilder转换为查询。
  3. 我应该在数据访问层中创建FilterConditionsToQuery类并直接在我的UI层中引用它,还是应该创建存储库?对于MVVM WPF应用程序,什么是更好的方法?

1 个答案:

答案 0 :(得分:0)

如果你愿意,你可以通过使用func委托来实现。 第一个func参数用于where子句,第二个用于top参数,第三个用于orderby子句

Program.cs的

 var dal = new DataAccessLayer();
 var result = dal.Get(x => x.Age > 40, 5, x2 => x2.Firstname);
 //var result = dal.Get(x => x.Age > 40 && x.Firstname == "Dave", 5, x2 => x2.Firstname);

DataAccessLayer.cs

public IEnumerable<Student> Get(Func<Student, bool> expr, int top, Func<Student, object> orderBy )
{
    var list = GetStudents();
    return list.Where(expr).Take(top).OrderBy(orderBy);
}