我在数据访问层中使用Entity Framework,我需要支持通过UI构建动态查询(例如(Name == "John" AND Age > 25).TOP(100).ORDERBY(LastName)
)。
我打算使用QueryBuilder
来创建动态查询。为此,我正在考虑创建如下结构:
FilterCondition
课程,其中包含Name is equal to John
等条件。FilterConditionsToQuery
类某处,使用List<FilterCondition>
将QueryBuilder
转换为查询。我应该在数据访问层中创建FilterConditionsToQuery
类并直接在我的UI层中引用它,还是应该创建存储库?对于MVVM WPF应用程序,什么是更好的方法?
答案 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);
}