2009-07-29 4 views
0

Ich habe eine Document-Klasse, die eine Benutzereigenschaft hat, die der Benutzer ist, der das Dokument besitzt, aber ich habe auch eine Benutzerliste. Benutzer, die Zugriff auf das Dokument haben. Ich versuche, eine Abfrage zu erstellen, die Dokumente zurückgibt, die ich entweder besitze oder auf die ich Zugriff habe.Wie kann ich eine ODER-Abfrage in NHibernate zwischen einer Eigenschaft und vielen zu vielen hinzufügen?

IList<Document> results = UnitOfWork.CurrentSession.CreateCriteria(typeof(Document)) 
       .CreateCriteria("Owner") 
       .CreateCriteria("UserList") 
       .Add(nh.Criterion.Restrictions.IdEq(obj.Id)) 
       .SetFirstResult(pageSize * page) 
       .SetMaxResults(pageSize) 
       .List<Document>(); 

Das oben ist was ich bisher versucht habe, aber ohne Erfolg. Die Struktur der Dokumentenklasse, verkürzt ist:

public class Document : DomainObject<Document>{ 
    public Document(){ 
      UserList = new List<User>(); 
    } 
    public virtual User Owner{get;set;} 
    public virtual IList<User> UserList{get;set;} 
} 

Ich schätze jede Anleitung zu diesem Thema !!

Cheeers,

Andrew

Beispiel SQL ICH FÜR

SCHAUT
declare @UserID uniqueidentifier 

set @UserID = '37f7a55f-84c9-461b-a5b2-b412fe96932b' 

select * from [Document] s 
where s.UserID = @UserID 
or exists(select * from DocumentUser su where su.userid = @UserID) 

Antwort

1

Können Sie bitte die SQL-Post, die zurückkommen würde, was Sie wollen? .

Ich denke, da ist eine Unterabfrage drin - ein losgelöstes Kriterium könnte in diesem Fall helfen. Dann fügen Sie es zum ICriteria wie hinzu: Add (Subqueries ....)

+0

Danke für die Rückmeldung. Das bedeutet, dass UserList eine Eigenschaft von Owner ist, UserList jedoch eine Eigenschaft von Document. Ich verstehe das auch als Fehler. konnte nicht auflösen Eigenschaft: UserList von: uk.co.andrewrea.BusinessLogic.Domain.Owner –

+0

Ich habe es mit einem Beispiel sql aktualisiert Ich bin auf der Suche nach –

1

Ich tat es!

Danke für Ihre Hilfe! Der letzte Kommentar, den du gemacht hast und mich nach dem SQL gefragt hast, hat mir wieder klar geschaut: Hier ist die Lösung:

+0

Glad Sie haben es funktioniert :). Ich habe gerade eine kleine Beispiel-App gemacht und mir genau dasselbe ausgedacht - du hast mich einfach dazu geschlagen: P – sirrocco

+0

Ich schätze deine Zeit !! :-) –

Verwandte Themen