Linq到NHibernate.ContainsAny()解决方案?

Linq到NHibernate.ContainsAny()解决方案?,nhibernate,c#-4.0,linq-to-nhibernate,Nhibernate,C# 4.0,Linq To Nhibernate,我遇到了一个大问题。我有两个目标: IList产品;和 收藏 这两个对象都包含和IList named.Tags 我正试着和Linq一起做这件事 products=products.Wherep=>p.Tags.Anyt=>collection.Tags.Containst 这将给出一个例外,因为Linq到NHibernate不支持这一点。但我如何才能做到这一点?我只是找不到任何聪明的方法来只获取包含特定集合的标签的产品 提前谢谢 顺便说一句,问题似乎非常类似,但在我的场景中,我不想与字符串数组

我遇到了一个大问题。我有两个目标: IList产品;和 收藏

这两个对象都包含和IList named.Tags

我正试着和Linq一起做这件事

products=products.Wherep=>p.Tags.Anyt=>collection.Tags.Containst

这将给出一个例外,因为Linq到NHibernate不支持这一点。但我如何才能做到这一点?我只是找不到任何聪明的方法来只获取包含特定集合的标签的产品

提前谢谢

顺便说一句,问题似乎非常类似,但在我的场景中,我不想与字符串数组进行比较,而是与poco对象的集合进行比较

[编辑] 我发现它引发了以下异常: 无法将类型为“System.Linq.Expressions.ConstantExpression”的对象强制转换为类型为“System.Linq.Expressions.LambdaExpression”

解决问题的其他方法也很受欢迎,如HQL等

谢谢!
[/EDIT]

集合.标记的基本类型是什么?可能是LINQ to NH不喜欢这种类型,或者它不理解如何访问Tags属性。这行吗

var tags = collection.Tags.ToList();
products = products.Where(p => p.Tags.Any(t => tags.Contains(t)));

好吧,我最终得到了一个有点无聊的解决方案,但它奏效了。如果有人遇到同样的问题:

products = _productRepository.Session()
                             .CreateSQLQuery(
                             @"SELECT {p.*} 
                               FROM Products p 
                               WHERE (SELECT COUNT(TagId) 
                                      FROM ProductTags 
                                      WHERE ProductId = p.Id 
                                      AND TagId IN (SELECT TagId 
                                                    FROM CollectionTags 
                                                    WHERE CollectionId = :collectionId)) > 0 
                               AND (ShopId = :shopId)")
                              .AddEntity("p", typeof(Product))
                              .SetInt32("collectionId", collection.Id)
                              .SetInt32("shopId", collection.Shop.Id)
                              .SetResultTransformer(NHibernate.Transform.Transformers.DistinctRootEntity)
                              .List<Product>().AsQueryable();

哦,我正在使用NHibernate 2.1.2替代方法:升级到最新版本和新的linq提供程序。类似的查询也可以工作。Hql应该是可能的,有2.1.2个anks作为您的答案!我已经尝试过了,但是我得到了相同的结果——只要我访问products集合,就会出现一个空异常。代码是编译的,当我请求结果时,它首先在运行时抛出异常。快速更新:我在代码之后添加了一个foreach循环,现在我得到了一个更有趣的异常:无法将“System.Linq.Expressions.ConstantExpression”类型的对象强制转换为“System.Linq.Expressions.LambdaExpression”。