在我正在使用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解析的表达式树的任何想法吗?
答案 0 :(得分:3)
因为你使用Count() > 0
,你可以使用Any代替:
Expression<Func<Model.Cusotmer, bool>> expr = c =>
c.Orders.Any(o => o.year == 2010);