gpt4 book ai didi

c# - 在 Entity Framework 中使用动态 where 子句

转载 作者:行者123 更新时间:2023-11-30 20:11:05 25 4
gpt4 key购买 nike

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

但是,看起来我无法接受动态 where 子句而不实现一些密集的重新例程来将它们解析为lambda 表达式。有什么我错过的吗?我对 Entity Framework 运气不好吗?

谢谢,马克

最佳答案

我想到了两个想法。

1). Dynamic 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();
}
}

关于c# - 在 Entity Framework 中使用动态 where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4198318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com