Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Запрос с помощью NHibernate ICriteria / 7 сообщений из 7, страница 1 из 1
23.11.2010, 10:57
    #36971283
psln
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с помощью NHibernate ICriteria
Есть три таблицы Applications(ключ - id, dept_id), Funds(ключ - id, внешний ключ для реализации связи с Applications - application_id) и Refunds(id, внешний ключ для реализации связи с Funds - fund_id) последовательно связаные связью "один-ко-многим", отображаемые в классы с такими же именами. Класс Refund имеет свойство Fund -ссылку на объект типа Fund, Fund - свойство Application. Необходимо отфильтровать объекты типа Refund по полю dept_id соответствующей записи в таблице Applications, т. е. по полю
Код: plaintext
refund.Fund.Application.DeptId
В SQL это выглядит так
Код: plaintext
1.
2.
3.
4.
SELECT * 
FROM (SELECT * FROM MSKRK."REFUNDS" r JOIN MSKRK."FUNDS" f ON r.fund_id = f.id) r 
JOIN MSKRK."APPLICATIONS" a 
ON r.application_id = a.id 
WHERE a.dept_id =  1 
Как это реализовать в NHibernate желательно с помощью Lambda Extensions никак додуматься не могу. С одним JOIN ещё более или менее понятно, с двумя уже непонятно совсем. Спасибо за помощь.
...
Рейтинг: 0 / 0
23.11.2010, 16:26
    #36972288
barser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с помощью NHibernate ICriteria
psln,
Код: plaintext
1.
2.
3.
4.
5.
6.
            sess.CreateCriteria(typeof(Refund))
                .CreateAlias("Fund", "f")
                .CreateAlias("f.Application", "a")
                .Add(Restrictions.Like("a.DeptId","A_Dept_Name",MatchMode.Anywhere))
                .SetFirstResult(0).SetMaxResults(10)
                .List<Refund>() as List<Refund>;
...
Рейтинг: 0 / 0
23.11.2010, 16:30
    #36972304
barser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с помощью NHibernate ICriteria
barser,

Restrictions.Like("a.DeptId","A_Dept_Name",MatchMode.Anywhere)
Restrictions.Eq("a.DeptId", 1)
...
Рейтинг: 0 / 0
24.11.2010, 03:15
    #36973112
psln
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с помощью NHibernate ICriteria
Большое спасибо! =)
с Lambda Extensions получилось так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
                Fund fundAlias = null;
                Application applicationAlias = null;

                var criteria = session
                    .CreateCriteria<Refund>()
                    .CreateAlias<Refund>(r => r.Fund, () => fundAlias, JoinType.LeftOuterJoin)
                    .CreateAlias(() => fundAlias.Application, () => applicationAlias, JoinType.LeftOuterJoin)
                    .Add(() => applicationAlias.Dept.Id == 1);
...
Рейтинг: 0 / 0
24.11.2010, 09:37
    #36973297
barser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с помощью NHibernate ICriteria
psln,

ого! а это какая версия нхибера?
В 2.1.1 Lambda Expressions вроде еще нету...
...
Рейтинг: 0 / 0
14.12.2010, 08:44
    #37012640
psln
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с помощью NHibernate ICriteria
...
Рейтинг: 0 / 0
14.12.2010, 10:33
    #37012785
barser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с помощью NHibernate ICriteria
psln,

спасибо за линк! Интересно попробовать заюзать эту либу...
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Запрос с помощью NHibernate ICriteria / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]