具有嵌套关系条件的Linq到NHibernate表达式树

时间:2011-06-27 13:51:00

标签: linq nhibernate expression-trees linq-to-nhibernate

在我正在使用NHibernate的.Net项目中,我有一段代码构建表达式树列表,具体取决于UI中用户在过滤器中设置的值。 表达式是针对我的域模型的特定对象构建的,比如说Customer。 当我想为Customes的属性创建过滤条件时,一切都很好,如下例所示:

Expression<Func<Model.Customer, bool>> expr = c =>
                    c.Name == "My Company";

但现在,我需要创建一个表达式,让我根据涉及一对多关系的条件过滤客户...让我们说订单。客户可以拥有多个订单,因此这种关系是一对多的。我需要构建一个我可以应用于Customer查询的表达式,以便只对2010年至少有一个订单的客户进行查询。我会写这样的东西:

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

太糟糕了,这不行。似乎NHibernate无法解析此Expression。 有关如何编写实现该搜索条件并可由Linq 2 NHibernate解析的表达式树的任何想法吗?

1 个答案:

答案 0 :(得分:3)

因为你使用Count() > 0,你可以使用Any代替:

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