Гость
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / [NHibernate] формирование запроса / 2 сообщений из 2, страница 1 из 1
18.07.2013, 14:11
    #38335596
_Novichok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[NHibernate] формирование запроса
Здравствуйте.

Постараюсь описать проблему.
Есть класс, по которому нужно делать выборку:
Код: 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
19.07.2013, 00:19
    #38336293
_Novichok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[NHibernate] формирование запроса
Для данной проблемы нашел такой выход:
Код: 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
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / [NHibernate] формирование запроса / 2 сообщений из 2, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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