Nhibernate вопрос (для оптимальной производительности) - PullRequest
1 голос
/ 16 сентября 2011

У меня есть таблица Посещений для магазина, который выглядит следующим образом:

   Id     Timestamp    UniqueUser     IsTrans
   1     2011-01-31       5874         True
   2     2011-01-30       1238         True
   3     2011-01-29       8547         True
   4     2011-01-28       5874         False
   5     2011-01-27       1238         True
   6     2011-01-26       1238         True
   7     2011-01-25       5874         False
   8     2011-01-24       1238         True
   9     2011-01-23       1238         True
   10    2011-01-22       5874         True
  ...        ...          ...          ...

Кроме того, у меня есть таблица Транзакции , которая содержит информацию о транзакции. Выглядит так:

   Id     Visit_Id       OrderPrice     
   1         1             100
   2         2             100
   3         3             100
   4         5             100
   5         6             100
   6         8             100
   7         9             100
   8         10            100
  ...        ...           ...         

Я хочу получить список посещений уникального пользователя, который вызвал транзакцию, плюс посещения, которые привели к транзакции (того же уникального посетителя). Например, для первой транзакции я хочу получить список, который содержит эти посещения

   Id     Timestamp    UniqueUser     IsTrans
   1     2011-01-31       5874         True
   4     2011-01-28       5874         False
   7     2011-01-25       5874         False

Ну, мне удалось сделать это с 2 запросами, как это:

   var transList = _session.QueryOver<Transaction>().Left.JoinAlias(x => x.visit, () => visitAlias).Where(() => visiteAlias.UniqueId == trans.visit.UniqueId && visit.Timestamp < trans.trackingCookie.Timestamp).Take(1).ToList();

   var listvisit =
                _session.QueryOver<Visit>().Where(
                    x =>
                    x.Timestamp <= trans.visit.Timestamp &&
                    x.Timestamp > transList[0].visit.Timestamp && x.UniqueId == trans.visit.UniqueId).OrderBy(x=>x.Timestamp).Desc().Future().ToList();

, где trans - первая транзакция. Как видите, я нахожу отметку времени последней транзакции того же пользователя, а затем извлекаю список.

Есть ли способ получить этот список всего за один запрос?

Заранее спасибо и извините за длину сообщения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...