2012-04-04 9 views
4

ich folgendes in Unterabfrage haben, die versagt:nHibernate QueryOver Kriterien abgelöst und eine Klausel

var subquery = QueryOver.Of<Product>() 
       .Where(x => x.ProductCategories.Any(y => y.Categgory == parameter.Category)); 

Ich erhalte eine Fehlermeldung für die jede Aussage:

Unrecognised method call: System.Linq.Enumerable:Boolean Any 

Wie würde ich die obige Einschränkung aktualisieren für QueryOver?

Antwort

5
ProductCategory productCategory = null; 
var subquery = QueryOver.Of<Product>() 
    .JoinAlias(product => product.ProductCategories,() => productCategory)    
    .Where(() => productCategory.Category.Id == parameter.Category.Id); 

Was ist der Typ der Kategorie? Wenn dies ein Unternehmen ist:

productCategory.Category.Id == parameter.Category.Id 

Wenn das Basiseigenschaft:

productCategory.Category == parameter.Category 

Ist es many-to-many-Beziehung? (Produkt und Kategorie)

Category category = null; 
var subquery = QueryOver.Of<Product>() 
    .JoinAlias(product => product.Category,() => category)    
    .Where(() => category.Id == parameter.Category.Id); 
1
ProductCategory productCategory = null; 
var subquery = QueryOver.Of<Product>() 
    .JoinAlias(product => product.ProductCategories,() => productCategory) 
    .Where(Subqueries.WhereExists(CatExistsQuery()) 


private QueryOver<ProductCategory , ProductCategory > CatExistsQuery(<your type> parameter) 
     { 
      ProductCategory _innerCat = null; 

      var query = (QueryOver<ProductCategory , ProductCategory >)Session 
         .QueryOver(() => _innerCat) 
         .Where(() => _productCategory.Id== _innerCat.Id) 
         .And (innerCat.Id == parameter.Category.Id) 

      return query ; 
     }