我注意到有两种方法可以创建对nhibernate的友好的通用友好访问.
IQueryOver<T, T> query= session.QueryOver<T>().Where(criteria);
Run Code Online (Sandbox Code Playgroud)
和
IQueryable<T> query= session.Query<T>().Where(criteria);
Run Code Online (Sandbox Code Playgroud)
每个接口的实现.
IQueryOver<TRoot, TSubType> : IQueryOver<TRoot>, IQueryOver
Run Code Online (Sandbox Code Playgroud)
和
IQueryable<out T> : IEnumerable<T>, IQueryable, IEnumerable
Run Code Online (Sandbox Code Playgroud)
IQueryable实现IEnumerable,因此支持您期望的所有LINQ友好的东西.我正在倾向于这个实现,但是想知道是否有人知道QueryOver的目的是什么,你无法用Query完成?
我有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找到包含子项的父项?