使用Contains时NHibernate查询中的异常

时间:2013-05-21 19:50:56

标签: c# nhibernate queryover

我有以下课程:

class Operation
{
    User User_AssignedTo;
    ResourceGroup ResourceGroup;
} 

class ResourceGroup
{
    List<User> UsersCollection;
}

我有方法。它需要用户并返回操作。 这样的事情:

ResourceGroup resourceGroup = null;

query = conn.Session.QueryOver<Operation>()
        .JoinAlias(item => item.ResourceGroup, () => resourceGroup)
        .Where(item => item.User_AssignedTo.Id == user.Id || resourceGroup.UsersCollection.Contains(userDm));

但我有例外

Unrecognised method call: System.Collections.Generic.ICollection`1[[Mapping.Classes.User, Mapping.Classes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8ab89f53b66a52c3]]:Boolean Contains

2 个答案:

答案 0 :(得分:1)

Contains是一个C#函数。在SQL中,我们将使用MyProperty IN (Select ...)。要使用NHibernate实现这一点,要使用IN子句和内部选择 - 我们可以使用DetachedCriteria

文档:15.8. Detached queries and subqueries

有一些详细的例子如何使用它:

注意:我想为您提供更多详细信息,甚至是您的解决方案,一些草案......但问题在于问题的片段。为了能够使用IN两个部分,应该选择一些 ID(1)ID和2)要比较的ID。 ResourceGroup缺少ID,很难理解后面的配对表是如何设计的。

但至少DetachedCriteria概念应该给你正确的方向......

答案 1 :(得分:0)

NHibernate并不喜欢&#39; ||&#39;运营商。试试这个:NHIbernate OR Criteria Query

如何进行Or操作的另一个例子: NHibernate JoinAlias query with null test not working