2012-04-12 11 views
1

KUNDE, COMPANY und eine relationale Tabelle CUSTOMER_COMPANY, die Beziehung zwischen Unternehmen und Kunden hält.NHibernate QueryOver, wo vorhanden

Ich habe eine Liste von E-Mail

Liste Emaillist

ich für Kunden suchen möge, die zu einer bestimmten Firma gehört und seine/ihre E-Mail (die ein Feld ist) ist in dieser Emaillist. Wie kann ich mit QueryOver tun?

public class CustomerMap : ClassMap<Customer> 
{ 
    public CustomerMap() 
    { 
     Id(x => x.Id); 
     Map(x => x.Name); 
     Map(x => x.Email); 
     //... Other Fields 

     HasMany(x => x.CompanyCustomers); 
    } 
} 


public class CompanyMap : ClassMap<Company> 
{ 
    public CompanyMap() 
    { 
     Id(x => x.Id); 
     Map(x => x.Title); 
      //... Other Fields 

     HasMany(x => x.CompanyCustomers); 
    } 
} 


public class CompanyCustomerMap : ClassMap<CompanyCustomer> 
{ 
    public CompanyCustomerMap() 
    { 
     Id(x => x.Id); 
     Map(x => x.IsActive); 
     Map(x => x.CustomerType); 
     ... 

     References(x => x.Customer); 
     References(x => x.Company); 
    } 
} 

Ich möchte Kunden erhalten, die zu einem Unternehmen gehört, die in einer E-Mail-Liste existiert ...

+0

Zeigen Sie uns Ihre Mapping für Kunden und Unternehmen Bitte – Rippo

+0

@Rippo ok ich füge Klassenkarten hinzu. –

Antwort

1

Sie mögen dieses versuchen:

Company company = null; 
session.QueryOver<Customer> 
    .JoinAlias(customer => customer.Company,() => company) 
    .WhereRestrictionOn(() => company.Email).IsIn(new[] { "email_1", "email_2", ... }) 
    .TransformUsing(Transformers.DistinctRootEntity) 
    .List(); 
+0

Sollte wahrscheinlich nur sein .List() - es gibt keinen Grund, über den Kunden zu befragen und eine Liste des Unternehmens zurückgeben, vor allem, wenn er die Kunden zurück will. – Fourth

+0

@Fourth Natürlich hast du recht, es war ein Fehler, ich habe es korrigiert. – Anton

Verwandte Themen