2009-04-17 12 views
2

Je veux convertir un NHibernate CreateCriteria en un critère NHLambdaExtensions, mais j'obtiens des erreurs que je ne sais pas comment corriger.NHibernate Lambda Extensions - CreateCriteria Problème

Les critères NHibernate ressemble à ceci:

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

Les critères de NHLambdaExtensions que je suis en train de créer ressemble à ceci:

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>(); 

L'erreur que je reçois est « Impossible de résoudre propriété Département de: Business.Department ". L'erreur a évidemment à faire avec "g => g.Department", et il n'y a rien dans la requête NHibernate d'origine qui a quelque chose de similaire, mais il n'y a pas de surcharge qui ne prend pas l'expression.

+0

Désolé pour le milliard retags. J'essayais d'obtenir le bon tag pour les expressions lambda qui n'étaient pas tronquées. – ddc0660

Répondre

3
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>(); 

Rechercher "Créer une association avec les critères Alias" dans NHibernate Lambda Extensions (V1.0.0.0) - Documentation

EDIT:

Vous pouvez réellement écrire ce plus efficacement:

// 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>(); 
0

Je n'ai pas utilisé NHLambdaExpressions (mais ça a l'air cool et je vais y jeter un coup d'œil), je ne fais que deviner ici. Pouvez-vous faire quelque chose comme ceci:

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>(); 

Je pense que cela arrachera un nouveau critère à objectifs et attribuer un alias via goalAlias.

+0

Cela n'a pas fonctionné non plus. –