Я сейчас использую шаблон репозитория с 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, но у меня возникают проблемы с вычислением дерева выражений, и любая помощь будет очень полезной.оценил.
Спасибо.