В проекте .Net, в котором я использую NHibernate, у меня есть фрагмент кода, который строит список деревьев выражений в зависимости от значений, установленных в фильтре пользователем в пользовательском интерфейсе.
Выражение построено на конкретном объекте моей доменной модели, скажем, Customer.
Когда я хочу создать критерии фильтра для свойства Customes, все в порядке, как в следующем примере:
Expression<Func<Model.Customer, bool>> expr = c =>
c.Name == "My Company";
Но теперь мне нужно создать выражение, которое позволит мне фильтровать клиентов по условию, включающему отношение один ко многим ... скажем, Order. У клиента может быть много заказов, поэтому отношения один-ко-многим. Мне нужно создать выражение, которое я могу применить к запросу клиента, чтобы получить только клиентов, у которых был сделан хотя бы один заказ в 2010 году. Я бы написал что-то вроде этого:
Expression<Func<Model.Cusotmer, bool>> expr = c =>
c.Orders.Where(o => o.year == 2010).Count() > 0;
Жаль, что это не сработает. Кажется, что NHibernate не может разобрать это выражение.
Любая идея о том, как написать дерево выражений, которое реализует эти критерии поиска и может быть проанализировано Linq 2 NHibernate?