QueryOver,GroupBy和Subselect

时间:2015-07-28 07:58:30

标签: nhibernate queryover

如何使用queryover和子查询执行此操作?

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();

在另一个查询中使用ID

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

我想使用子查询来执行此操作,因为SQL查询的参数数量有限制。我该怎么做?

如何编写第一个查询,但不选择SelectGroup()?这正是我陷入困境的地方。

1 个答案:

答案 0 :(得分:2)

Group by without projection in QueryOver API is currently not supported link.

You can use LINQ to create the projection in a subquery:

 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));

If you really needs QueryOver to create more complex queries check this solution link.