2013-09-24 2 views
2

Я пытаюсь выбрать диапазон Guids с NHibernate:Выберите Guid диапазон в NHibernate, где положение

customersToUpdate = 
        Session.QueryOver<Customer>() 
          .Where(x => x.SyncEndpointTick > localTick && x.SyncEndpointTick <= endTick).OrderBy(x => x.Id).Asc 
          .Where(x=> x.Id.ToString().ToLower() > lastResultId.ToString().ToLower()) 
          .ConvertTo<List<Customer>>(); 

Проблема заключается в том, что LINQ не позволяет мне сравнивать Guids:

.Where(x=> x.Id.ToString().ToLower() > lastResultId.ToString().ToLower()) 

благодарю вас все

+0

Вы код сравнение строк, а не GUIDs, хотя операторы сравнения также не определены для GUIDs, потому что они не имеют особый смысла там. –

+0

Я знаю, что сравниваю строки, но нет другого способа сравнения гидов. Я ищу альтернативу или как могу это сделать правильно – setlio

+0

вы можете считать обработанные записи и использовать Skip (обработано) – Firo

ответ

2

от this answer вы можете попробовать заменить эту строку:

.Where(x=> x.Id.ToString().ToLower() > lastResultId.ToString().ToLower()) 

с:

.Where(Restrictions 
     .Gt(Projections.Cast(NHibernateUtil.String, Projections.Property("Id")), 
      lastResultId.ToString()).IgnoreCase()) 

В зависимости от вашей БД сортировки, то IgnoreCase может быть бесполезным.

Надеется, что это поможет

Смежные вопросы