Frage

Ich möchte ein NHibernate CreateCriteria in ein konvertieren NHLambdaExtensions Kriterien, aber ich erhalte Fehler, die ich nicht beheben kann.

Die NHibernate-Kriterien sehen folgendermaßen aus:

var departments = DepartmentService
    .CreateCriteria()
    .CreateAlias( "Goals", "goal" )
    .Add( Expression.Eq( "goal.Company.Id", companyId ) )
    .Add( Expression.Eq( "goal.Program.Id", programId ) )
    .List<Business.Department>();

Die NHLambdaExtensions-Kriterien, die ich zu erstellen versuche, sehen folgendermaßen aus:

Business.Goal goalAlias = null;
var departments = DepartmentService
    .CreateCriteria()
    .CreateAlias<Business.Goal>( g => g.Department, () => goalAlias )
    .Add<Business.Goal>( g => g.Company.Id == companyId )
    .Add<Business.Goal>( g => g.Program.Id == programId )
    .List<Business.Department>();

Die Fehlermeldung, die ich erhalte, ist „Die Eigenschaft Abteilung von: konnte nicht aufgelöst werden“Geschäftsabteilung".Der Fehler hat offensichtlich mit „g => g.Department“ zu tun, und in der ursprünglichen NHibernate-Abfrage gibt es nichts Ähnliches, aber es gibt keine Überladungen, die den Ausdruck nicht annehmen.

War es hilfreich?

Lösung

Business.Goal goalAlias = null;
var departments = DepartmentService
    .CreateCriteria(typeof(Business.Department)) // need to specify the first criteria as Business.Department
        .CreateCriteria<Business.Department>(d => d.Goals, () => goalAlias)
            .Add<Business.Goal>( g => g.Company.Id == companyId )
            .Add<Business.Goal>( g => g.Program.Id == programId )
    .List<Business.Department>();

Suchen Sie nach "Kriterien erstellen Vereinigung mit Alias" in NHibernate Lambda Extensions (v1.0.0.0 ) - Dokumentation

EDIT:

Sie können dies tatsächlich schreiben effizienter als:

// no alias necessary
var departments = DepartmentService
    .CreateCriteria<Business.Department>()
        .CreateCriteria<Business.Department>(d => d.Goals)
            .Add<Business.Goal>( g => g.Company.Id == companyId )
            .Add<Business.Goal>( g => g.Program.Id == programId )
    .List<Business.Department>();

Andere Tipps

Ich habe NHLambdaExpressions noch nicht verwendet (aber es sieht ziemlich cool aus und ich werde es auf jeden Fall bald ausprobieren), also rate ich hier nur.Könnten Sie so etwas tun:

Business.Goal goalAlias = null;
var departments = DepartmentService
    .CreateCriteria()
        .CreateCriteria((Business.Department g) => g.Goals, () => goalAlias)
            .Add<Business.Goal>( g => g.Company.Id == companyId )
            .Add<Business.Goal>( g => g.Program.Id == programId )
            .List<Business.Department>();

Ich denke, dass dies ein neues Kriterium bei Goals einführen und über goalAlias ​​einen Alias ​​zuweisen wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top