c# - 在简单类型的集合上创建条件

标签 c# sql nhibernate nhibernate-criteria

如何使用 CreateCriteria 查询简单类型的集合?

比如我有1个类(class)

public class Test
{
    public virtual Guid Id { get; set; }

    private ICollection<int> _values = new HashedSet<int>();        
    public virtual ICollection<int> Values
    {
        get { return _values; }
    }
}

还有 2 个表来支持它:

  • 仅使用 1 列进行测试:Id
  • 具有 2 列的值:TestId 和 Value

我的目标是使用 CreateCriteria 重写以下查询:

select * from test t
inner join values v on v.TestId = t.Id
where v.Value = 10

我试过这个:

Session.CreateCriteria<Test>("test")
  .CreateAlias("test.Values", "values")
  .Add(Restrictions.Eq("values", 10))
  .List();

就像我会用一组对象来完成它,但显然失败了。加入是正确的,但如何添加限制?

最佳答案

尽管有这个问题,我还是建议使用 IList<ValueEntity>而不是 IList<int> .

嗯,只有当包含值 ([dbo].[values]) 的表可以有自己的替代 ID 列时,这才会起作用。 IE。这些列:ID , TestId , Value我们可以引入新实体 ValueEntity 并将其映射为一级公民。然后查询它会变得更加简单,包括子查询..

但我知道这不是这里的问题。

事实上,有一个解决方案,上面的问题有答案。但是,请至少尝试考虑上述建议...

NHibernate 解决方案IList<int>集合查询是:

Session.CreateCriteria<Test>("test")
  .CreateAlias("test.Values", "values")
  // we add magic keyword ".elements" here
  .Add(Restrictions.Eq("values.elements", 10))
  .List();

请参阅“.elements”,它的记录有点不正确 here .还提供了这个类似问题的答案:NHibernate How do I query against an IList<string> property?

关于c# - 在简单类型的集合上创建条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26750751/

相关文章:

c# - 如何将桌面应用程序与网页连接?

c# - WinForm - TabStop 不工作

mysql - 获取相关表mysql中的记录数

mysql - 使用 ID 连接到另一个表时连接名字和姓氏

mysql - 无法删除添加主键

c# - 使用 NHibernate 映射通用类

c# - 从函数中获取 NHibernate QueryOver .SelectList(x)

NHibernate Linq 提供程序问题

C#解析json中的数组

c# - 在 SQL Server 中保存时,是否可以保留 C# 十进制类型的原始尾随零?