【问题标题】:Exception in NHibernate query when use Contains使用包含时 NHibernate 查询中的异常
【发布时间】:2013-05-21 19:50:56
【问题描述】:

我有以下课程:

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

【问题讨论】:

  • 我没有 NHibernate,但我想问题可能是它无法将 Contains() 转换为 SQL 查询。你能用resourceGroup.UsersCollection.Any(u =&gt; u.ID == userDm.ID)之类的东西吗?
  • 我试过了,但我得到了同样的例外,但对于 Any
  • NHibernate 不喜欢 '||'操作员。试试这个:[stackoverflow.com/questions/3299022/… [1]:stackoverflow.com/questions/3299022/…
  • 您能否展示一下您对Any() 的尝试?
  • @Linus: Any 在这里不起作用。 QueryOver翻译成SQL,.Any是QueryOver不知道怎么转换的方法。

标签: c# nhibernate queryover


【解决方案1】:

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

文档:15.8. Detached queries and subqueries

有一些详细的使用示例:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 但如何在此解决方案中使用 resourceGroup.UsersCollection.Contains(userDm)?
    • UsersCollection 是另一个表吗?如果是这样,您将需要另一个连接别名并加入
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    相关资源
    最近更新 更多