Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq到nhibernate-其中集合包含id为的对象_C#_Linq_Nhibernate_Fluent Nhibernate_Linq To Nhibernate - Fatal编程技术网

C# Linq到nhibernate-其中集合包含id为的对象

C# Linq到nhibernate-其中集合包含id为的对象,c#,linq,nhibernate,fluent-nhibernate,linq-to-nhibernate,C#,Linq,Nhibernate,Fluent Nhibernate,Linq To Nhibernate,我有两个这样的物体 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; } } HasManyToMany<Child>(x => x.C

我有两个这样的物体

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; }
}
HasManyToMany<Child>(x => x.Children)
            .Table("ParentsChildren")
            .ParentKeyColumn("ParentId")
            .ChildKeyColumn("ChildId");
我的fluent映射看起来像这样

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; }
}
HasManyToMany<Child>(x => x.Children)
            .Table("ParentsChildren")
            .ParentKeyColumn("ParentId")
            .ChildKeyColumn("ChildId");
HasManyToMany(x=>x.Children)
.Table(“ParentsChildren”)
.ParentKeyColumn(“ParentId”)
.ChildKeyColumn(“ChildId”);

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

您使用的是哪个NHibernate版本

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

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

var parent=session.Linq()
.Where(p=>p.Children.Any(c=>c.ChildId==ChildId))
.FirstOrDefault();

我不记得旧的NHibernate linq库是否已经支持此类查询。

我最终创建了一个由父对象和子id组成的复合对象。然后,我将其映射到
ParentsChildren
表,并在查询中使用该对象。然后,我使用linq从查询返回的复合对象中选择父对象。