代码之家  ›  专栏  ›  技术社区  ›  Colin Bowern

查找子集合不包含具有特定属性值的项的父集合

  •  0
  • Colin Bowern  · 技术社区  · 14 年前

    我正在尝试获取子集合不包含特定类型项的父集合列表。LINQ等价物如下所示:

    dataset.Where(x => x.Items.FirstOrDefault(y => y.Type.Code == "ABC") == null)
    

    对象模型是父级>子级(项)>类型>代码

    如果父级是我的聚合根,我将如何在nhibernate条件/查询中对其建模?这是我的第一次尝试:

    var results = session.CreateCriteria<Parent>()
        .CreateCriteria("Items")
        .CreateCriteria("Type")
        .Add(Restrictions.Not(Restrictions.Eq("Code", "ABC")))
        .SetResultTransformer(Transformers.DistinctRootEntity)
        .List<Parent>();
    

    这似乎不能返回正确的实体-它只是返回所有实体。

    1 回复  |  直到 14 年前
        1
  •  0
  •   Diego Mijelshon    14 年前

    使用HQL比使用标准更容易做到这一点:

    from Parent
    where id not in
          (select p.Id
           from Parent p
           join p.Items item
           where item.Type.Code = 'ABC')
    

    您将得到预期的结果,而不需要使用distinctrootentity。