NHibernate Query для Sql Query - PullRequest
       2

NHibernate Query для Sql Query

1 голос
/ 08 декабря 2011

Позвольте мне объяснить мой сценарий. У меня есть таблица HSPartList, в которой есть partName, description, issueNo и т. Д. Когда должен быть выполнен поиск, у меня есть критерий, в котором должны быть перечислены все детали с последней проблемой No. то есть. Если данные таблицы следующие:

|PartName| PartDesc| IssueNo|

TestPart1  TestPart1  1
TestPart1  TestPart1  2
TestPart2  TestPart2  1
TestPart2  TestPart2  2

В этом примере при поиске последних проблем должно возвращаться только

|PartName| PartDesc| IssueNo|

TestPart1  TestPart1  2
TestPart2  TestPart2  2

У меня есть SQL-запрос для этого. Мне нужно преобразовать это в запрос nHibernate.

Запрос Sql:

select * from HS_PartList HS where HS.IsLive = 1 and HS.PartName Like '%test%' and IssueNo=(select max(issueNo) from HS_PartList where HS_PartList.PartName=HS.PartName)

Версия NHibernate: 2.1.2.4000

Ответы [ 2 ]

2 голосов
/ 08 декабря 2011
  Using Hql it Works fine 
string SearchTerm = "TestPart2";
string search = "and (partdetail.PartName like '%" + SearchTerm + "%') ";
var hql = string.Format(@"select partdetail  from HSPartList as partdetail  where  IssueNo =(select Max(IssueNo)  from HSPartList)") + search;
var context = _session.CreateQuery(hql).List<HSPartList>();
2 голосов
/ 08 декабря 2011
var subquery = DetachedCriteria.For<Part>()
    .Add(Restrictions.EqProperty("Name", "part.Name"))  <-- part is the alias of the main query
    .SetProjection(Projections.Max("IssueNo"));

var results = session.CreateCriteria<Part>("part")
    .Add(Restrictions.Eq("IsLive", true))
    .Add(Restrictions.Like("Name", teststring, MatchMode.Anywhere))
    .Add(Subqueries.Eq("IssueNo", subquery))
    .List();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...