Linq to NHibernate Expression Tree с условием вложенного отношения - PullRequest
1 голос
/ 27 июня 2011

В проекте .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?

1 Ответ

3 голосов
/ 27 июня 2011

потому что вы используете Count() > 0, вы можете использовать любой вместо:

Expression<Func<Model.Cusotmer, bool>> expr = c =>                        
                    c.Orders.Any(o => o.year == 2010);
...