C# 使用包含时NHibernate查询中出现异常

C# 使用包含时NHibernate查询中出现异常,c#,nhibernate,queryover,C#,Nhibernate,Queryover,我有以下课程: class Operation { User User_AssignedTo; ResourceGroup ResourceGroup; } class ResourceGroup { List<User> UsersCollection; } NHibernate不喜欢“| |”运算符。试试这个: 如何执行Or操作的另一个示例: NHibernate不喜欢“| |”运算符。试试这个: 如何执行Or操作的另一个示例: 包含的是一个C#函数

我有以下课程:

class Operation
{
    User User_AssignedTo;
    ResourceGroup ResourceGroup;
} 

class ResourceGroup
{
    List<User> UsersCollection;
}

NHibernate不喜欢“| |”运算符。试试这个:

如何执行Or操作的另一个示例:
NHibernate不喜欢“| |”运算符。试试这个:

如何执行Or操作的另一个示例:
包含的
是一个C#函数。在SQL中,我们将使用(Select…
中的
MyProperty。为了使用NHibernate实现这一点,我们可以使用
DetachedCriteria

文件:

下面有一些详细的示例说明如何使用它:

  • (例如传呼)
  • (例如,通过选择最大值(id)进行过滤)
注:我想为您提供更多的细节,甚至是您的解决方案,一些草稿。。但问题在于问题中的片段。要能够在
中使用
,这两个部分都应该有一些ID(1)要选择的ID和2)要比较的ID)
ResourceGroup
缺少ID,很难理解后面的配对表是如何设计的


但至少DetachedCriteria概念应该为您提供正确的方向…

包含的
是一个C#函数。在SQL中,我们将使用(Select…
中的
MyProperty。为了使用NHibernate实现这一点,我们可以使用
DetachedCriteria

文件:

下面有一些详细的示例说明如何使用它:

  • (例如传呼)
  • (例如,通过选择最大值(id)进行过滤)
注:我想为您提供更多的细节,甚至是您的解决方案,一些草稿。。但问题在于问题中的片段。要能够在
中使用
,这两个部分都应该有一些ID(1)要选择的ID和2)要比较的ID)
ResourceGroup
缺少ID,很难理解后面的配对表是如何设计的


但至少DetachedCriteria概念应该为您提供正确的方向…

我不知道如何使用Hibernate,但我想问题可能是它无法将
Contains()
转换为SQL查询。你能使用类似于
resourceGroup.UsersCollection.Any(u=>u.ID==userDm.ID)
的东西吗?我试过了,但我得到了相同的异常,但对于AnyNHibernate,它不喜欢“| |”操作符。试试这个:[[1]:你能展示一下你用
Any()
尝试过的方法吗?@Linus:
Any
在这里不起作用。QueryOver被翻译成SQL,
。Any
是QueryOver不知道如何转换的方法。我不知道NHibernate,但我想问题可能是它无法翻译
包含()
到SQL查询中。您是否可以使用类似于
resourceGroup.UsersCollection.Any(u=>u.ID==userDm.ID)
?我尝试过,但得到了相同的异常,但对于AnyNHibernate,它不喜欢“| |”运算符。尝试一下:[[1]:您能展示一下您使用
Any()尝试过的内容吗
?@Linus:
任何
在这里都不起作用。QueryOver被翻译成SQL,
。任何
都是QueryOver不知道如何转换的方法。但是我如何使用resourceGroup.UsersCollection.Contains(userDm)在此解决方案中?UsersCollection是另一个表吗?如果是,您将需要另一个joinalias和join但是如何在此解决方案中使用resourceGroup.UsersCollection.Contains(userDm)?UsersCollection是另一个表吗?如果是,您将需要另一个joinalias和join
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