2015-07-28 56 views
1

如何使用queryover和子查詢來做到這一點?QueryOver,GroupBy和Subselect

FakturaObjektGutschrift fog = null; 
int[] idS = Session.QueryOver(() => fog) 
      .SelectList(list => list 
       .SelectMax(() => fog.Id) 
       .SelectGroup(() => fog.SammelKontierung) 
      ).List<object[]>().Select(x => (int)x[0]).ToArray(); 

並採用IDS在另一個查詢

IQueryOver<Beleg, Beleg> sdfsd = Session.QueryOver(() => bGut) 
    .AndRestrictionOn(() => fog.Id).IsIn(idS); //iDs is a list of int. 

我想用一個子查詢做到這一點,因爲有對的一個SQL查詢參數的數量限制。我該怎麼做呢?

如何編寫第一個查詢,但沒有選擇SelectGroup()?這正是我卡住的地方。

回答

1

集團通過沒有QueryOver API投影目前不支持link

您可以使用LINQ 子查詢創建投影:

var subquery = Session.Query<FakturaObjektGutschrift>() 
    .GroupBy(x => x.SammelKontierung) 
    .Select(x => x.Max(y => y.Id)); 

var query = Session.Query<Beleg>() 
    .Where(x => subquery.Contains(x.Id)); 

如果你真的需要QueryOver創建更復雜的查詢,檢查該解決方案link

+0

非常感謝您的回答!我的解決方法:我創建了一個額外的數據庫視圖,將其映射並使用不包含groupby的子查詢。 – yonexbat