Как использовать дерево выражений LINQ для соединения с другой таблицей? - PullRequest
1 голос
/ 10 ноября 2010

Я сейчас использую шаблон репозитория с nHibernate.Я могу без проблем использовать деревья выражений при выборе только одной сущности (одной таблицы), но я бы хотел выполнить внутреннее соединение с другой таблицей, чтобы получить связанную строку.Вот что у меня получилось:

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.Примерно так:

return user => user.Id == Order.UserId

Это легко сделать в LINQ, но у меня возникают проблемы с вычислением дерева выражений, и любая помощь будет очень полезной.оценил.

Спасибо.

1 Ответ

0 голосов
/ 10 ноября 2010
...