|
|
1
2
您需要确保为您想要的遗产拥有的每个功能加入一次MyFeatureValue。 一种方法是为每个迭代调用.createAalias,给它一个唯一的别名,然后添加表达式“aliax.id”
foreach (var id in idCollection)
{
query = query.CreateAlias("MyFeatureValue", "feature" + id)
.Add(Expression.Eq("feature" + id + ".Id",id);
}
我真的不记得语法是如何发展的,把它写在我的脑子里,也不确定是否需要重新声明查询:) 但是,我认为这会让你开始。 编辑:由于条件API中的错误限制您使用CreateAlias或CreateCriteria多次关联集合,因此需要使用HQL。 http://derek-says.blogspot.com/2008/06/duplicate-association-path-bug-in.html (冬眠也有同样的问题) select e FROM Estate AS e INNER JOIN e.MyFeatureValue AS fv1 INNER JOIN e.MyFeatureValue AS fv2 WHERE fv1.Id = 3 AND fv2.Id = 13 您需要动态构建HQL,以便别名变得唯一(fv1、fv2、fvx…) |
|
|
2
8
如果我理解正确的话,我想这样的事情可能会奏效。
|
|
|
3
2
nhibernate为您生成了什么查询?您可以使用show_sql config属性来检查这一点。 正如我看到的您的查询,您正在尝试获取具有给定功能集的所有地产。 我认为,这将生成一个看起来像
如果要检索包含所有指定功能的所有地产,我认为必须使用分离,以便nhibernate检索至少具有其中一个功能的所有地产。
然后,在您的客户代码中,您将检查您的“客户代码”中的每一个地产,以便最终得到具有所有功能的地产。
|
|
|
4
1
代码看起来像是在传递一个特性值列表,并需要一个具有所有这些特性的列表。如果是这样的话,我将查看正在生成的SQL,并对数据库运行它,以查看您是否应该返回任何内容。 否则,如果您正在寻找一个具有您要传递的任何特性的列表,那么您应该使用分离而不是连接。 |
|
|
5
0
|
|
|
6
0
看起来像你想要的
|
|
|
7
0
我也试过,但结果是一样的:
|