Возвратите Список типизированного объекта через CreateSQLQuery в NHibernate

Несколько способов сделать его более эффективным, Pythonic:

  1. Устранить конструкцию set(), так как алгоритм должен исключать дубликаты во время основного цикла.
  2. Если вам просто нужно перебрать результаты, используйте yield для генерации значений.
  3. Сократите построение промежуточных объектов, например: переместите вызов tuple() в точку, где создаются окончательные значения, избавляя вас от необходимости создавать и выбрасывать дополнительные кортежи, и повторно использовать список saved для хранения текущий временной диапазон для сравнения.

Код:

def merge(times):
    saved = list(times[0])
    for st, en in sorted([sorted(t) for t in times]):
        if st <= saved[1]:
            saved[1] = max(saved[1], en)
        else:
            yield tuple(saved)
            saved[0] = st
            saved[1] = en
    yield tuple(saved)

data = [
    [(1, 5), (2, 4), (3, 6)],
    [(1, 3), (2, 4), (5, 8)]
    ]

for times in data:
    print list(merge(times))
12
задан GEOCHET 16 November 2011 в 17:37
поделиться

2 ответа

"SELECT * FROM dbo.tb_calendar_calEvents INNER JOIN dbo.tb_calEvents ON (dbo.tb_calendar_calEvents.calEventID = dbo.tb_calEvents.id) WHERE dbo.tb_calendar_calEvents.calendarID = 'theCalID'"

должно быть

"SELECT * FROM dbo.tb_calendar_calEvents INNER JOIN dbo.tb_calEvents ON (dbo.tb_calendar_calEvents.calEventID = dbo.tb_calEvents.id) WHERE dbo.tb_calendar_calEvents.calendarID = :theCalID"

= 'theCalID' следует записать как =: theCalId; : theCalId - это то, как вы используете именованные параметры даже в собственных SQL-запросах.

9
ответ дан 2 December 2019 в 22:05
поделиться

Вы должны удалить вызов query.ExecuteUpdate () . Выполнения query.List () достаточно, чтобы выполнить запрос в сеансе и вернуть набор результатов.

2
ответ дан 2 December 2019 в 22:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: