2010-11-10 7 views
1

J'utilise le modèle de référentiel avec nHibernate pour le moment. Je suis capable d'utiliser des arborescences d'expression sans aucun problème lors de la sélection d'une seule entité (une table) mais je voudrais faire une jointure interne avec une autre table pour obtenir une ligne liée. Voici ce que j'ai jusqu'à présent:Comment utiliser l'arbre d'expression LINQ pour rejoindre une autre table?

public abstract class QueryBase<T> 
{ 
    public abstract Expression<Func<T, bool>> MatchingCriteria { get; } 

    public T SatisfyingElementFrom(IQueryable<T> candidates) 
    { 
     return SatisfyingElementsFrom(candidates).SingleOrDefault(); 
    } 

    public IQueryable<T> SatisfyingElementsFrom(IQueryable<T> candidates) 
    { 
     return candidates.Where(MatchingCriteria).AsQueryable(); 
    } 
} 

public class UserByEmailAddress : QueryBase<User> 
{ 
    private string _emailAddress; 

    public UserByEmailAddress(string emailAddress) 
    { 
     _emailAddress = emailAddress; 
    } 

    public override Expression<Func<User, bool>> MatchingCriteria 
    { 
     get { return user => user.EmailAddress == _emailAddress; } 
    } 
} 

Je voudrais pouvoir retourner un utilisateur à partir d'une OrderId. Quelque chose comme ça:

retour user => user.Id == Order.UserId

Il est facile à faire dans LINQ mais je vais avoir des problèmes déterminer l'arbre d'expression et toute aide serait très apprécié.

Merci.

Répondre