powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / NHibernate. Вычисляемые поля
9 сообщений из 9, страница 1 из 1
NHibernate. Вычисляемые поля
    #37101621
skon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Столкнулся с проблемой следующего рода. Есть класс, описывающий характеристики устройства
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public class A
{
   public virtual string a1 {get; set;}

   public virtual string a2 {get; set; }

   public virtual IList<B> BList {get; set; }

   public int CalculatedProperty {get; set; }

   ...
}
И
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public class B
{
   public virtual DateTime b1 {get; set; }

   public virtual long b2 {get; set; }

   public virtual A ARef {get; set; }

   ...
}

Порядок расчета A.CalculatedProperty:
Код: plaintext
1.
2.
var list = BList.Where(b => b.ReportDate >= from && b.ReportDate <= to).ToList();
A.CalculatedProperty = max(list.b2) - min(list.b2)
Прошу прощения за небольшую условность, как max(list.b2), но думаю понятно, что список A.BList фильтруется по дате и вычисляется, как разница максимального и минимального значения BList[i].b2
from, to - даты по которым фильтруется список.

Нужно получить список IList<A>, отфильтрованный по параметрам a1, a2, from, to; отсортированный по вычисляемому полю CalculatedProperty; записи с n по m.

Подскажите куда копать? CreateMultiCriteria? ХП?
...
Рейтинг: 0 / 0
NHibernate. Вычисляемые поля
    #37101923
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skon,

Честно говоря, не очень понял чего вы хотите.
Если CalculatedProperty должно вычисляться в БД, то смотрите на атрибут formula в маппинге свойства. Пример есть тут .
Если его надо вычислять на клиете C#-кодом - то вообще не вижу проблемы: пишите нужные вам вычисления. Отсортировать IList<T> не проблема.

MultiCriteria принципиально вам ничем не поможет, т.к. просто позволяет выполнить за один поход к БД несколько запросов.
...
Рейтинг: 0 / 0
NHibernate. Вычисляемые поля
    #37102004
skon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SolYUtorskon,

Честно говоря, не очень понял чего вы хотите.
Если CalculatedProperty должно вычисляться в БД, то смотрите на атрибут formula в маппинге свойства. Пример есть тут .
Если его надо вычислять на клиете C#-кодом - то вообще не вижу проблемы: пишите нужные вам вычисления. Отсортировать IList<T> не проблема.

MultiCriteria принципиально вам ничем не поможет, т.к. просто позволяет выполнить за один поход к БД несколько запросов.

Не пеняйте уж сильно новичка).
1. За пример спасибо, в общем-то то, что нужно за небольшим уточнением. Как быть с параметрами? Для того, чтобы рассчитать это поле мне нужно передать туда @DateFrom и @DateTo

Отсортировать то не проблема, проблема получить записи с n по m, отсортированные по этому полю + реальный объем данных (порядка 1к объектов A и 1М объектов B). Загрузить все, рассчитать, отсортировать и оставить нужное - слишком накладная операция, хочется загружать только то, что отображается на странице грида (записи с n по m) .
...
Рейтинг: 0 / 0
NHibernate. Вычисляемые поля
    #37102068
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skon,

готового решения у меня для вас нет. Но могу помочь информацией к размышлению. A.List<B> для NHibernate не просто список в свойстве, а отношение между сущностями. Поэтому если вы его пофильтурете, а потом вызовете Session.Flush() - отфильтрованные записи будут удалены из отношений (а может и из бд, смотря что там у вас намаплено).
Если вам надо в грид запихнуть только часть полей + какие-то вычисление - то рекомендую рассмотреть проекции + hql-запросы. Примеры смотрите в документации. Да и постраничная выборка в NHibernate уже реализована.
...
Рейтинг: 0 / 0
NHibernate. Вычисляемые поля
    #37102086
skon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SolYUtorskon,

готового решения у меня для вас нет. Но могу помочь информацией к размышлению. A.List<B> для NHibernate не просто список в свойстве, а отношение между сущностями. Поэтому если вы его пофильтурете, а потом вызовете Session.Flush() - отфильтрованные записи будут удалены из отношений (а может и из бд, смотря что там у вас намаплено).
Если вам надо в грид запихнуть только часть полей + какие-то вычисление - то рекомендую рассмотреть проекции + hql-запросы. Примеры смотрите в документации. Да и постраничная выборка в NHibernate уже реализована.
Спасибо. Тут ведь главное в правильном направлении начать разбираться
...
Рейтинг: 0 / 0
NHibernate. Вычисляемые поля
    #37274283
vitali.podobed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А почему нельзя так?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public class ....
       ......
CalculatedProperty 
{
    get 
   {
          var list = BList.Where(b => b.ReportDate >= from && b.ReportDate <= to).ToList();
   
          rerurn max(list.b2) - min(list.b2);

   }

}
= 
...
Рейтинг: 0 / 0
NHibernate. Вычисляемые поля
    #37274321
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitali.podobed,

Можно, но есть нюансы:
skonОтсортировать то не проблема, проблема получить записи с n по m, отсортированные по этому полю + реальный объем данных (порядка 1к объектов A и 1М объектов B). Загрузить все, рассчитать, отсортировать и оставить нужное - слишком накладная операция, хочется загружать только то, что отображается на странице грида (записи с n по m) .
...
Рейтинг: 0 / 0
NHibernate. Вычисляемые поля
    #37274360
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SolYUtorvitali.podobed,

Можно, но есть нюансы:
skonОтсортировать то не проблема, проблема получить записи с n по m, отсортированные по этому полю + реальный объем данных (порядка 1к объектов A и 1М объектов B). Загрузить все, рассчитать, отсортировать и оставить нужное - слишком накладная операция, хочется загружать только то, что отображается на странице грида (записи с n по m) .
дак вроде акцессор ленивый, он сработает только при вставке итема в таблицу, а в коллекции будет молчать.
или я опяит четне так понял?
...
Рейтинг: 0 / 0
NHibernate. Вычисляемые поля
    #37274735
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи,

1k объектов А, и 1М объектов B. В оном коде все эти радости будут тащится на клиента. Хотя реально надо несколько значений. Добавьте проблему select N+1 для полного счастья. Ждать придётся доооолго.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / NHibernate. Вычисляемые поля
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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