2010-11-10 55 views
1

我现在在nHibernate中使用存储库模式。从一个实体(一个表)中进行选择时,我可以毫无问题地使用表达式树,但我希望与另一个表进行内部连接以获取相关行。这是我到目前为止:如何使用LINQ表达式树连接到另一个表?

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; } 
    } 
} 

我想能够基于OrderId返回一个用户。类似的东西:

回报用户=> user.Id == Order.UserId

它很容易在LINQ做,但我有问题搞清楚表达式树和任何帮助,将不胜感激。

谢谢。

回答