Nhibernate ICriteria 和在查询中使用 Lambda 表达式

2024-05-01

你好,我是 NHibernate 的新手,我有点困惑。

假设我们有一个product桌子。 让product表有 2 列价格1 和价格2。

然后我可以通过 HQL 查询映射的产品实体,如下所示:

string queryString = @"from product p
where p.price1 = p.price2 + 100 ";
IList result = session.CreateQuery(queryString).List();

我如何通过 ICriteria API 实现这一点。

我知道这很荒谬,但我正在尝试这样的事情:

session.CreateCriteria(typeof(product))
   .Add(Expression.Eq("price1", "price2" + 100))
   .List()

或者更恰当地说(使用 lambda 扩展):

session.CreateCriteria(typeof(product))
   .Add<product>(p => p.price1 == (p.price2 + 100))
   .List()

事实上,我从 googlecode 下载了 lambda 扩展项目,并将其扩展为递归处理二进制和一元表达式来实现如下表达式:

session.CreateCriteria(typeof(product))
   .Add<product>(p => 
               (!(p.price1 > 29007) && (p.price1 > 19009)) 
            || (p.price2 == 29009));

我目前正在处理如上所述的查询,但算术子句让我很烦,因为我无法返回适当的限制来获取我需要的标准。

mpffh 我厌倦了试图以全面的方式解释它。我希望它有效。任何帮助表示赞赏。


你可以试试这个:

ISQLFunction sqlAdd = new VarArgsSQLFunction("(", "+", ")");
var products = session
    .CreateCriteria<product>()
    .Add(
        Expression.EqProperty(
            "price1", 
            Projections.SqlFunction(
                sqlAdd, 
                // TODO: replace this with appropriate type
                NHibernateUtil.Double,
                Projections.Property("price2"),
                Projections.Constant(100) 
            )
        )
    )
    .List<product>();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nhibernate ICriteria 和在查询中使用 Lambda 表达式 的相关文章

  • 是否可以在不改变作为框架一部分的 DDD 模型的情况下使用 NHibernate

    我挖掘了很多关于DDD方法 无处不在的语言 聚合 存储库等 我认为 与我读到的很多内容相反 实体应该有行为而不是不可知论 我看到的所有例子都倾向于呈现实体虚拟自动属性 and an 空构造函数 受保护或最糟糕的是公开 就是这样 我认为这种对
  • NHibernate 和 DateTime 映射的问题

    我在查询时遇到问题 我在给定的范围内选择记录 时间跨度 我从中选择的列的类型为日期 我已经映射了这个 列作为 DateTime 属性 查询可以工作 但速度很慢 生成的查询如下所示 由NH分析器 http nhprof com select
  • NHibernate 按 id 逐出

    大家都知道session中有缓存 这个缓存一般可以通过2种方法来清除 会话 驱逐 会话 清除 第二种方法不仅删除单个条目的所有缓存 我有商业方法 它接收大对象的 id 来自 aspx 站点 或有时接收多个 id 并在数据库中进行原生sql操
  • NHibernate:如何从会话缓存中获取实体实例?

    我在工作单元开始时开始会话 并在工作单元结束时关闭 工作单元分布在多种方法中 在一种方法中 我使用加载实体Get方法 所以它位于会话缓存中 实体实例对于方法来说是本地的 因此 当方法范围结束时 实体实例将无法访问 但实体仍在会话缓存中 现在
  • NHibernate Criteria API 是否支持集合属性的投影?

    我需要使用条件 API 复制以下工作 HQL 查询 session CreateQuery select c from Parent p inner join p Children c where p Id 9 and c Id 33 Se
  • Hibernate 命名查询使用 Like 和 % % 运算符?

    在我的 Hibernate JPA 示例代码中 public List
  • NHibernate Hi/Lo - id 中的间隙

    场景 Hi Lo 初始化为MyEntity与 Lo 100 桌子是空的 具有不同连接的两个会话都插入了三个项目 TableIds 1 2 3 100 101 102 如果稍后有第三个进来并插入三项 TableIds 200 201 202
  • 如何将此本机 SQL 查询转换为 HQL

    所以我有这个很长的复杂的 Native SQLQuery string hql SELECT FROM SELECT a rownum r FROM select f2 filmid f2 realisateurid f2 titre f2
  • 在nhibernate中设置聚集索引

    我试图在 nhibernate 中定义一个不是 id 的属性作为聚集索引 但我发现没有办法做到这一点 谁能给我指点一下这是如何完成的 或者它是当前在 nhibernate 中不可用的东西 提前致谢 您可以使用
  • 如何在 HQL 中编写 Like 查询

    我想搜索以特定字母开头的特定字符串 因此 例如如果起始字母是 A 那么它应该产生一个结果 其中包含所有带有字母的字符串 A 我该如何实现这一目标 我的查询如下所示 Query qry session createQuery From Reg
  • 通过条件查询获取表的第一行

    如何使用以下命令获取表格的第一行criteria or HQL query 表创建脚本 CREATE TABLE MonthlySubscriber MSISDN bigint 20 NOT NULL MonthOfYear int 11
  • 保存时的 NHibernate FlushMode

    我已将 NHibernate 会话上的 FlushMode 属性设置为 FlushMode Never 但是当我调用 session Save User 时 无论如何都会调用数据库 这是应该如何工作的吗 我认为在我调用 Flush 之前它不
  • Breeze + NHibernate 多对一关系,避免指定关系键

    以下多对一映射正在运行 取自 NorthBreeze public partial class UserRole public virtual long ID get set public virtual long UserId get s
  • NHibernate双向多对多映射列表/包

    我正在努力处理双向多对多映射 其中顺序在一侧很重要 但在另一侧则不重要 我有两个班级 项目和学生 一个项目有很多学生 顺序很重要 方案A John Sally Seth 方案B Alex Seth Amy John 一个学生有很多程序 但顺
  • 如何在 Hibernate 中左连接获取多个子项?

    我正在使用 hibernate 但在创建一个获取对象的所有子对象的 hql 查询时遇到了麻烦 例如 对象用户有一个汽车列表和一个朋友列表 为了让用户拥有他的汽车 我将使用以下查询 from User u left join fetch u
  • 最好的 NHibernate 二级缓存提供程序是什么?

    我见过有很多这样的 NCache Velocity 等等 但我还没有找到比较它们的表格 考虑以下标准什么是最好的 容易明白 最近正在维护中 是免费的或者有足够好的免费版本 Works 我无法说出什么是最好的或最差的 但我会分享我使用 NCa
  • 升级到 NHibernate 3.1:LINQ、Any 和映射组件集合的错误

    我们目前正在从 NHibernate 2 升级到 3 1 以下场景适用于旧的 LINQ 提供程序 但不适用于 NHibernate 3 1 中的新提供程序 以下是该场景的映射 public class FooDbMap ClassMap
  • NHibernate双向一对一映射问题

    当尝试在 NHibernate 中创建双向一对一映射时 我发现我无法递归地获得对象的引用 例如 假设我之间有一对一的关系Person and Address 然后执行以下代码后 class Person public Address Add
  • NHibernate QueryOver<> - SubQuery 上的聚合函数

    如何使用 QueryOver 语法编写以下 SQL 语句 SELECT COUNT FROM SELECT FirstName LastName FROM People GROUP BY FirstName LastName as sub
  • HQL Hibernate 内连接

    我怎样才能在 Hibernate 中编写这个 SQL 查询 我想使用 Hibernate 来创建查询 而不是创建数据库 SELECT FROM Employee e INNER JOIN Team t ON e Id team t Id t

随机推荐