gpt4 book ai didi

c# - 休眠.Linq : Restricting query results with Where(Expression>)

转载 作者:太空狗 更新时间:2023-10-29 23:09:48 24 4
gpt4 key购买 nike

我使用 NHibernate 查询我的数据库。现在我需要限制使用谓词选择的数据。到目前为止,我发现(Google 驱动的最佳开发)使用 Expressions 和 NHibernate.Linq 可以实现类似的事情。

这是我尝试过的:

public IList<Bestellung> GetAll(Predicate<Order> predicate)
{
Expression<Func<Order, bool>> restriction = x => predicate(x);
ISession session = SessionService.GetSession();
IList<Order> bestellungen = session.Query<Order>()
.Where(restriction).ToList();
return bestellungen;
}

这导致无法将“NHibernate.Hql.Ast.HqlCast”类型的对象转换为类型“NHibernate.Hql.Ast.HqlBooleanExpression”。快速检查一下问题所在:将方法主体的第一行更改为

Expression<Func<Order, bool>> restriction = x => x.Id!=1;

令人震惊的结果是一切正常。

如何让我的谓词在表达式中执行?

最佳答案

你不能 - at least not easily . NHibernate(作为 EF 和 LINQ to SQL)解释表达式并将其转换为 SQL。 NHibernate 根本不知道如何将谓词转换为 SQL。

实现它的一种方法是替换 Predicate<T>本身带有 Expression<Func<T, bool>> :

public IList<Bestellung> GetAll(Expression<Func<Order, bool>> restriction)
{
ISession session = SessionService.GetSession();
IList<Order> bestellungen = session.Query<Order>()
.Where(restriction).ToList();
return bestellungen;
}

重要:
调用此方法的代码看起来仍与以前相同:

var orders = GetAll(x => x.Id != 1);

关于c# - 休眠.Linq : Restricting query results with Where(Expression<Predicate<T>>),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9905301/

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