关于几个属性的NHibernate QueryOver条件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于几个属性的NHibernate QueryOver条件相关的知识,希望对你有一定的参考价值。
我有这个armor
表,有三个字段来识别个别设计:make
,model
和version
。
我必须为我们的软件实现搜索功能,让用户根据各种标准搜索装甲,其中包括他们的设计。
现在,用户对设计的想法是包含make
,model
和version
连接的单个字符串,因此条目是单个字符串。假设他们想要查看制作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);
不幸的是,这些字段可能有不同的长度。例如,make
,model
和version
的另一组值可能分别是“NGI”,“928”和“RX”,上面的代码将解析错误。所以我无法绕过这种困难。我也不能使用RegEx。
我也不能在我的Armor
类中组成一个连接所有三个属性的属性,因为它不能被NHibernate转换为SQL。
有人知道怎么做吗?
也许我应该在这里使用一个明确的SQL条件,但它会如何与其他条件混合?
看来你可以使用Projections.Concat
来解决你的问题:
z_quoQuery = z_quoQuery.And(armor => Projections.Concat(armor.make, armor.model, armor.version) == z_strDesign);
以上是关于关于几个属性的NHibernate QueryOver条件的主要内容,如果未能解决你的问题,请参考以下文章
NHibernate Invalid Cast - 使用查询时属性类型不匹配
Fluent NHibernate - NHibernate.QueryException:无法解析属性