2016-06-24 8 views
1

Ich brauche Hilfe mit Unterabfragen. Mein Problem scheint einfach, aber ich kann es nicht herausfinden.Unterabfrage in Kriterien von nHibernate

Ich habe 3 Einheiten: - Unternehmen - Autos - Mitarbeiter

Mitarbeiter eine Liste von Unternehmen (aber Gesellschaft muß nicht eine Liste der Mitarbeiter haben). Auto hat eine Firma.

Ich muss alle Autos von jedem Unternehmen abrufen, auf das ein Mitarbeiter Zugriff hat.

Datenbankstruktur, falls es hilft.

Firma

id |  Name  

Mitarbeiter

id |  Name  

CompanyToEmployee

employee_id |  company_id  

Auto

id | Name | company_id  

Als gmiley sugested, das Hinzufügen I`m einige mora info.

Was ich bisher gemacht habe: Nicht viel.

Aber was es zurückgibt, ist alle Autos innerhalb der Firma mit der gleichen Identifikation "Angestellter" hat. Und ich kann sehen warum. Aber ich kann es nicht schaffen, es meinen Bedürfnissen anzupassen.

Dumb Daten zu klären:

Es gibt zwei Mitarbeiter. "Bill Gates" e „Steve Jobs

Bill Gates für Google und Microsoft arbeitet

Steve Jobs arbeitet für Google und Apple. .

Google hat 2 Autos. "Auto 1" und "Car 2"

Microsoft hat 1 Auto: "Das Auto 3"

Apple hat 3 Autos: "Car 4", "Car 5" und "Car 6".

Was ich brauche: Alle Autos von allen Firmen Bill Gates arbeitet für.

In diesem Fall Autos: "Car 1", "Car 2" und "Car 3".

Vielen Dank im Voraus!

+0

Wenn Sie könnten, fügen Sie bitte einige Beispieldaten, ein Beispiel für Ihre Ergebnisse, die Sie wünschen, und vor allem, stellen Sie einige der Code, den Sie bisher versucht haben, damit wir wissen, wie weit Sie es gemacht haben (es geht auch ein langer Weg, um Hilfe zu bekommen, wenn die Leute sehen, dass du dich bemüht hast, nicht zu sagen, dass du es nicht getan hast, nur dass es gut ist zu zeigen, dass du es getan hast). Selbst wenn Sie wissen, dass der Code völlig falsch ist, hilft es uns zu verstehen, was Sie vielleicht denken. – gmiley

+0

Ist das Hausaufgaben? Datenbankdesign ist ein bisschen komisch. Es ist jedoch immer möglich, ein besseres Klassendesign zu haben. Es ist nicht notwendig, für diese Abfrage zu ändern, aber es würde das Leben viel einfacher machen. –

+0

Es ist ein echtes Fall-Szenario auf sehr einfache Weise ausgesetzt. Fokussierung des Problems. –

Antwort

0

schaffe ich zu meinem Problem auf eine sehr einfache Art und Weise zu lösen:

 foreach (var company in user.Companies) 
     { 
      companies.Add(company.Id); 
     } 

     consult.Add(Expression.In("Company.Id", companies)); 

Da ich bereits Benutzer Firmen Liste haben, dieses nicht mir Performance-Probleme geben.

0

In dieser Zeile:

.SetProjection(Projections.Property("Companies")) 

Sie haben eine ganze Sammlung von Unternehmen in der Projektion.Ich wusste nicht, dass das eigentlich ohne Syntaxfehler läuft. Ich weiß jedoch nicht, was es tatsächlich tut und würde mich nicht darauf verlassen.

Wahrscheinlich würde die Verwendung von Alias-Namen auch die Dinge klarer machen. Versuchen Sie folgendes:

var cars = Session.CreateCriteria<Car>("c"); 

var c = DetachedCriteria.For<Employee>("emp") 
    // join 
    .CreateCriteria("emp.Company", "comp") 
    // select company id 
    .SetProjection(Projections.Property("comp.id")) 
    // of all companies where the employee is working in. 
    .Add(Restrictions.Eq("emp.Id", employee.Id)); 

carCompanies.Add(Subqueries.PropertyIn("comp.Id", c)); 
+0

Mitarbeiter haben "Firma". Es hat eine Liste von Firmen. –

Verwandte Themen