2009-10-12 8 views
2

J'essaye de trouver comment créer une requête en utilisant Linq to NHibernate.NHibernate: HasMany components et Where/Contains clause

J'ai deux classes comme celle-ci:

public class Foo 
{ 
    private ISet<Bar> _bars = new HashedSet<Bar>(); 
    public virtual ISet<Bar> Bars 
    { 
     get { return _bars; } 
     set { _bars = value; } 
    } 
} 

public class Bar 
{ 
    public string Name { get; set; } 
    public string Color { get; set; } 
} 

collection Bar de Foo est mappée comme un à plusieurs collecte de composants.

Maintenant, je veux exécuter une requête qui devrait ressembler à ceci:

var myBar = new Bar { Name = "test", Color = "testColor" }; 

var matchingFoos = Session.Linq<Foo> 
        .Where(foo => foo.Bars.Contains(myBar), 
          new BarEqualityComparer()) 
        .ToList(); 

Je ne sais pas si cela est correct, mais chaque fois que je lance cette requête je reçois un NullReferenceException à l'intérieur d'une méthode appelée NHibernate .Linq.Visitors.WhereArgumentsVisitor.GetCollectionContenuCriteria méthode.

Quelqu'un pourrait-il m'aider avec un autre moyen d'exécuter cette requête?

+0

Je pense que Linq to NHibernate n'est pas capable de traiter une telle requête. C'est une implémentation ** très ** minimale. –

Répondre

2

Le BarEqualityComparer sera certainement le point d'échec. Il n'existe pas de moyen simple pour le fournisseur de traduire une classe personnalisée en une instruction SQL.