簡體   English   中英

Nhibernate Queryover,如何訪問嵌套屬性

[英]Nhibernate Queryover, how to access nested proeprty

這是我的模特

public class A{
    public int Id {get; set;}
    public ICollection<B> bs {get; set;}
}

public class B{
    public int Id {get; set;}
    public ICollection<C> cs {get; set;}
}

public class C{
    public int Id {get; set;}
}

現在我想獲取A對象的B對象的C類的Max(Id):

public int GetMaxId(int idA, int idB)

我嘗試一些不同的方式:

var max= _session.QueryOver<A>().Select(a => a.Bs)
.Where(a => a.Id == idA).SingleOrDefault<ICollection<B>>()
.Where(b => b.Id == idB).FirstOrDefault<B>().Cs.Max(c => c.Id);

var max = _session.QueryOver<A>().Where(a => a.Id == idA).Select(a => a.Bs.Where(b => b.Id == idB)).Future<B>().Max(c => c.Id);

但沒有任何效果

有什么辦法嗎? 謝謝

首先,請注意SingleOrDefaultFirstOrDefault結束您的查詢。 之后的所有內容都將在內存中處理,而不是在數據庫中處理! 除此之外,在這些方法之后,您還有機會出現NullReferenceException

要在QueryOver API中使用嵌套屬性,您需要使用別名。 如圖所示這里標題“別名”下。

但是我認為最簡單的方法是改為使用LINQ:

_session.Query<A>()
    .Where(a => a.Id == idA)
    .SelectMany(a => a.Bs)
    .Where(b => b.Id == idB)
    .SelectMany(b => b.Cs)
    .Max(c => (int?)c.Id) // the cast makes sure you don't get a null reference (tnx to gt.guybrush)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM