【问题标题】:NHibernate QueryOver condition on several properties几个属性上的 NHibernate QueryOver 条件
【发布时间】:2018-09-05 13:34:43
【问题描述】:

我有这个armor 表,它有三个字段来识别单个设计:makemodelversion

我必须为我们的软件实现一个搜索功能,让用户根据各种标准搜索盔甲,其中包括他们的设计。

现在,用户的设计理念是包含makemodelversion 连接的单个字符串,因此条目就是那个单个字符串。假设他们想查找制造 FH、型号 TT、版本 27 的规格,他们会想到(并输入)“FHTT27”。

我们使用IQueryOver 对象,在其上根据标准添加连续条件。对于设计,我们的代码是

z_quoQuery = z_quoQuery.And(armor => armor.make + armor.model + armor.version == z_strDesign);

这会引发 InvalidOperationException,“从范围 '' 引用的 'IArmor' 类型的变量 'armor',但未定义”。

这在此处被描述为一个错误:https://github.com/mbdavid/LiteDB/issues/637

经过大量试验和错误,似乎不使用armor 变量的语法首先引发了该异常。

显然,我至少现在必须走另一条路线,但在搜索了一段时间后,我似乎无法找到方法。我想使用类似的东西

z_quoQuery = z_quoQuery.And(armor => armor.make == z_strDesign.SubString(0, 2).
                        And(armor => armor.model == z_strDesign.SubString(2, 2).
                        And(armor => armor.version == z_strDesign.SubString(4, 2);

不幸的是,这些字段可能具有可变长度。例如,makemodelversion 的另一组值可能分别是“NGI”、“928”和“RX”,上面的代码会解析错误。所以我不能那样绕过困难。我也不能使用正则表达式。

我也不能在我的Armor 类中创建一个属性来连接所有三个属性,因为NHibernate 无法将它转换为SQL。

有人知道怎么做吗?

也许我应该在这里使用显式 SQL 条件,但它如何与其他条件混合使用?

【问题讨论】:

    标签: nhibernate conditional-statements queryover


    【解决方案1】:

    看来您可以使用Projections.Concat 来解决您的问题:

    z_quoQuery = z_quoQuery.And(armor => Projections.Concat(armor.make, armor.model, armor.version) == z_strDesign);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多