powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / [NHibernate] формирование запроса
2 сообщений из 2, страница 1 из 1
[NHibernate] формирование запроса
    #38335596
Фотография _Novichok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.

Постараюсь описать проблему.
Есть класс, по которому нужно делать выборку:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
public class Assent
{
    //...
    public virtual int Id { get; set; }
    //...
    public virtual IList<WaterUsePurposeSet> WaterUsePurposes { get; set; } // список
    //...
}


Код: c#
1.
2.
3.
4.
5.
public class WaterUsePurposeSet
{
    public virtual int Id { get; set; }
    public virtual WaterUsePurposeType Type { get; set; }
}


Код: c#
1.
2.
3.
4.
5.
public class WaterUsePurposeType
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
}


Пользователь может выбрать произвольное число WaterUsePurposeType и запрос, наверное, должен формироваться как-то динамически.
Нужно делать выборку среди Assent по WaterUsePurposeType.Id . Сделать надо это с помощью NHibernate: HQL, Linq, chain methods, ... - каким-то способом.
Ума не приложу, как это сделать.

Спасибо
...
Рейтинг: 0 / 0
[NHibernate] формирование запроса
    #38336293
Фотография _Novichok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для данной проблемы нашел такой выход:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
using (ISession session = sessionFactory.OpenSession())
{
    using (ITransaction tx = session.BeginTransaction())
    {
        IList<Assent> tempList = null;
        foreach (WaterUsePurposeType t in types)
        {
            IQueryOver<Assent, WaterUsePurposeSet> quer1 =
            session.QueryOver<Assent>()
                   .JoinQueryOver<WaterUsePurposeSet>(c => c.WaterUsePurposes)
                   .Where(k => k.Type.Id == t.Id);
            tempList = quer1.List();
            assents.AddRange(tempList.Where(asss => !assents.Contains(asss)));
        }
        tx.Commit();
    }
}


Вот только смущает тот момент, что выборка происходит для каждого WaterUsePurposeType по отдельности.
Может можно как-то оптимизировать?
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / [NHibernate] формирование запроса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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