У меня возникли проблемы с созданием правильных критериев для выполнения конкретного запроса - после полудня после консультации с профессором Google я надеюсь, что кто-то может указать мне правильное направление.
У меня есть две сущности интереса: OutputTsDef
и NamedAttribute
Я пытаюсь найти все OutputTsDef
, которые имеют конкретное значение NamedAttribute
.
Я могу написать отдельный критерий, чтобы найти все NamedAttributes
, которые имеют
имя и значение:
var attributesCriteria
= DetachedCriteria.For<INamedAttribute>()
.Add(Expression.Eq("Name", "some name"))
.Add(Expression.Eq("Value", "some value"));
Как мне вставить это в запрос для OutputTsDef, чтобы ограничить результаты?
var criteria
= nHibernateSession.CreateCriteria(typeof(IOutputTsDefEntity));
// What do I write here?
var results = criteria.List();
NamedAttribute
выглядит так - обратите внимание на использование [Any]
, как мы можем иметь
NamedAttributes
на многих видах сущностей.
[AttributeIdentifier("DbKey", Name = "Id.Column", Value = "NamedAttributeID")]
[Class(Table = "NamedAttributes")]
public class NamedAttribute : BusinessEntity, INamedAttribute
{
[Any(0, Name = "Entity", MetaType = "System.String", IdType = "System.Int32")]
[MetaValue(1, Class = "Sample.OutputTsDef, Sample.Entities", Value = "OTD")]
[MetaValue(2, Class = "Sample.OutputTimeSeriesAttributesEntity, Sample.Entities", Value = "OTA")]
[Column(3, Name = "OwnerType")]
[Column(4, Name = "OwnerKey")]
public virtual IBusinessEntity Entity { get; set; }
[Property(Column = "Name")]
public virtual string Name { get; set; }
[Property(Column = "Value")]
public virtual string Value { get; set; }
... omitted ...
}
В обычном SQL я бы просто включил дополнительное предложение where:
where OutputTsDefId
in ( select distinct OwnerKey
from NamedAttributes
where Name = ?
and Value = ?
and OwnerType = 'OTD' )
Чего мне не хватает?
(Вопрос также размещен в списке рассылки NHUsers - здесь я скопирую любую полезную информацию.)