1

我有以下课程:

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
4

2 回答 2

1

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

文档:15.8。分离的查询和子查询

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

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

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

于 2013-05-22T04:40:22.253 回答
0

NHibernate 不喜欢 '||' 操作员。试试这个:NHIbernate OR Criteria Query

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

于 2013-05-21T20:01:45.123 回答