【发布时间】:2018-09-05 13:34:43
【问题描述】:
我有这个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”,上面的代码会解析错误。所以我不能那样绕过困难。我也不能使用正则表达式。
我也不能在我的Armor 类中创建一个属性来连接所有三个属性,因为NHibernate 无法将它转换为SQL。
有人知道怎么做吗?
也许我应该在这里使用显式 SQL 条件,但它如何与其他条件混合使用?
【问题讨论】:
标签: nhibernate conditional-statements queryover