NHibernate Como posso consultar uma propriedade IList <string>?

Eu estou tentando consultar uma propriedade IList <string> em uma das minhas classes de domínio usando o NHibernate. Aqui está um exemplo simples para demonstrar:

public class Demo
{
    public Demo()
    {
        this.Tags = new List<string>();
    }
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual IList<string> Tags { get; set; }
}

Mapeado assim:

<class name="Demo">
<id name="Id" />
<property name="Name" />
<bag name="Tags">
  <key column="DemoId"/>
  <element column="Tag" type="String" />
</bag>

E eu sou capaz de salvar e recuperar muito bem. Agora, para consultar instâncias da minha classe de domínio em que a propriedade Tags contém um valor especificado:

var demos = this.session.CreateCriteria<Demo>()
            .CreateAlias("Tags", "t")
            .Add(Restrictions.Eq("t", "a"))
            .List<Demo>();

Resultados no erro: a coleta não foi uma associação: Demo.Tags

var demos = (from d in this.session.Linq<Demo>()
                     where d.Tags.Contains("a")
                     select d).ToList();

Resulta no erro: Objct reference não definida para uma instância de um objeto.

var demos = this.session.CreateQuery("from Demo d where :t in elements(d.Tags)")
            .SetParameter("t", "a")
            .List<Demo>();

Funciona bem, mas como minha classe de domínio real tem muitas propriedades, e estou construindo uma consulta dinâmica complicada, fazer manipulação feia de strings não é minha primeira escolha. Eu preferiria usar ICriteria ou Linq. Eu tenho uma interface de usuário onde muitos possíveis critérios de pesquisa possíveis podem ser inseridos. O código que constrói a ICriteria agora é dezenas de linhas. Eu realmente odiaria transformar isso em manipulação de strings HQL.

questionAnswers(6)

yourAnswerToTheQuestion