这是一个问题,不知道你的主题,但我有搜索dlong和硬,所以我希望这不会太痛苦。
我正在使用nhibernate进行多对多查询。
我的对象映射(不是我的设计,不会很快改变):
计算机(身份证,姓名等) - > (映射表) - >配置(id,key,value)
一台计算机可能有许多配置,任何配置可能属于多台计算机。我可以把电脑看得很好,列表(包)成员就可以了。
然后我想找一台有很多配置的电脑。E.g。所有计算机: 操作系统:Windows CPU:2GHz 等
我将非常感谢有关如何将其纳入标准查询的任何帮助。我已经完成了一些基础知识,但是围绕这个问题很难实现。
欢呼任何协助, 罗布。
答案 0 :(得分:1)
如果参数始终相同,请使用如下查询:
var computers = session.CreateQuery(
@"select c
from Computer c
inner join c.Configurations as osconfig
inner join c.Configurations as cpuconfig
where
osconfig.Name = 'OS'
and osconfig.Value = :os
and cpuconfig.Name = 'CPU'
and cpuconfig.Value = :cpu")
.SetString("os", "Windows")
.SetString("cpu", "2GHz")
.List<Computer>();
如果您将其映射为地图,您甚至可以执行以下操作:
var computers = session.CreateQuery(
@"select c
from Computer c
where
c.Configurations['OS'] = :os
and c.Configurations['CPU'] = :cpu")
.SetString("os", "Windows")
.SetString("cpu", "2GHz")
.List<Computer>();
如果参数始终不同,请使用条件动态添加它们。