ну вот как я это делал вечно
не самый подходящий код
но все равно ...
Я объединил запрос с ограничением SQL, используя свойство базового критерия
Мне нужно было использовать псевдоним для ограничения из-за строки в исходном коде nhibernate, которая ищет псевдоним и получает подстроку с начала псевдонима
Если вы не предоставите псевдоним, очевидно, он не сможет
if (tagIds != null && tagIds.Count > 0)
{
StringBuilder attrXPath = new StringBuilder();
for(int counter = 0;counter<tagIds.Count();counter++)
{
attrXPath.Append("@id=\"");
attrXPath.Append(tagIds[counter]);
attrXPath.Append("\"");
if(counter < tagIds.Count() - 1)
attrXPath.Append(" or ");
}
query.UnderlyingCriteria
.Add(Restrictions.Eq(Projections.SqlProjection("tags.exist('/tags/tag[" + attrXPath.ToString() + "]') as XmlRestriction",
new string[] { "XmlRestriction" },
new IType[] { NHibernateUtil.String}), 1));
}