我正在尝试重新设计最初使用 Raptier 构建的数据访问层。 Raptier 生成的方法接受 where 子句作为要传递到存储过程的参数。我确实需要保留现有的 mesthos 签名,因此我的新 DAL 也需要接受 where 子句。我想使用更最新的数据访问技术和技巧,因此正在考虑使用.Net 4.0 中的实体框架。
然而,看起来我不能接受动态 where 子句而不实现一些密集的重新例程来将它们解析为巴表达式。有什么我错过的吗?我对实体框架运气不好吗?
谢谢,
马克
我想到了两个想法。
1). 动态LINQ,它允许您将 where 运算符定义为字符串。
var result = Northwind.Products
.Where("CategoryId=2 And UnitPrice>3")
.OrderBy("SupplierId");
2)。使用某物作为EntityFilter<T>
(见代码here),它允许您定义如下过滤器:
IEntityFilter<Person> entityFilter =
from person in EntityFilter<Person>.AsQueryable()
where person.Name.StartsWith("a")
where person.Id < 100
select person;
您可以提供IEntityFilter<Person>
到能够过滤该查询的业务方法:
public static Person[] GetAllPersons(
IEntityFilter<Person> filter)
{
using (var db = ContextFactory.CreateContext())
{
IQueryable<Person> filteredList =
filter.Filter(db.Persons);
return filteredList.ToArray();
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)