我有两件这样的东西

public class Child
{
    public virtual int ChildId { get; set; }
}

public class Parent
{
    public virtual int ParentId { get; set; }

    public virtual IList<Child> Children { get; set; }
}

我正在尝试编写一个linq to nhibernate查询,以选择包含具有特定ID的子项的父项。return x => x.Children.Contains不起作用。我也试过这个。
return x => (from y in x.Children where y.ChildId.Equals(childId) select y).Count() > 0

我流畅的地图是这样的
HasManyToMany<Child>(x => x.Children)
            .Table("ParentsChildren")
            .ParentKeyColumn("ParentId")
            .ChildKeyColumn("ChildId");

如何按ID查找包含子项的父项?

最佳答案

你用的是哪种纤维的?
如果您使用的是新的nhibernate linq库,那么我认为您可以执行以下操作:

var parent = session.Query<Parent>()
    .Where(p => p.Children.Any(c => c.ChildId == childId))
    .FirstOrDefault();

在旧版本中,您必须使用.Linq<T>()而不是.Query<T>()
var parent = session.Linq<Parent>()
    .Where(p => p.Children.Any(c => c.ChildId == childId))
    .FirstOrDefault();

我不记得以前的nhibernate linq库是否已经支持这种查询。

09-26 15:47