Nhibernate SQLQuery как подзапрос - PullRequest
0 голосов
/ 15 мая 2018

Как можно использовать собственный sqlquery (session.CreateSqlQuery) в качестве фильтрующего подзапроса в другом QueryOver:

                // Get  ids
            var idsq = _session.CreateSQLQuery(
                "select Id from [dbo].[SomeFunction](:parameter)")
                .AddEntity(typeof(long)).
                SetParameter("parameter", folderId);

            // get entities by filtering where in (subquery)
            MyEntity entityAlias = null;
            var listOfEntities = await _session.QueryOver(() => entityAlias).
                Where(x=>x.Id).IsIn(idsq).
                OrderBy(x => x.Name).Asc.
                ListAsync(cancelToken).ConfigureAwait(false);

1 Ответ

0 голосов
/ 15 мая 2018

Вы не можете легко смешивать различные стили NHibernate ... Что вы можете сделать:

var crit = new SQLCriterion(SqlString.Parse("{alias}.Id IN (select Id from [dbo].[SomeFunction](?))"),
                                    new object[] { folderId },
                                    new IType[] { NHibernateUtil.Int64 });

, а затем:

var listOfEntities = await _session.QueryOver(() => entityAlias)
    .Where(crit)
    .OrderBy(x => x.Name).Asc

Обратите внимание, как я изменил текстовый запрос, добавив{alias}.Id IN (...)

...