Linq to nhibernate - 其中collection包含带id的对象

Jos*_*osh 4 c# linq nhibernate fluent-nhibernate linq-to-nhibernate

我有2个像这样的对象

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; }
}
Run Code Online (Sandbox Code Playgroud)

我试图写一个linq到nhibernate查询来选择一个父类,其中包含一个具有特定id的子.return x => x.Children.Contains不起作用.我也尝试过这个.

return x => (from y in x.Children where y.ChildId.Equals(childId) select y).Count() > 0
Run Code Online (Sandbox Code Playgroud)

我的流畅映射看起来像这样

HasManyToMany<Child>(x => x.Children)
            .Table("ParentsChildren")
            .ParentKeyColumn("ParentId")
            .ChildKeyColumn("ChildId");
Run Code Online (Sandbox Code Playgroud)

如何通过id找到包含子项的父项?

Eli*_*ing 7

你使用哪个NHibernate版本?

如果您正在使用新的NHibernate linq库,那么我认为您可以执行以下操作:

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

在旧版本中,您必须使用.Linq<T>()而不是.Query<T>():

var parent = session.Linq<Parent>()
    .Where(p => p.Children.Any(c => c.ChildId == childId))
    .FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

我不记得旧的NHibernate linq库是否已经支持这些类型的查询.