Получить индекс предмета (rownum)

2

У меня есть таблица с 10 000 элементами.

 IQuerable<IEntity> query = dataRep.Get<IEntity>()
                                   .Query();

Мне нужно получить индекс (rownum) выбранного obj без получения всех элементов таблицы

 var obj = query.Where( x => x.Name == "testName")
                .FirstOrDefault();

Простое выполнение sql:

 select name, id, r from 
 (
     select name, id, rownum r from collections order by id
 ) where name = 'testName';

Как это сделать в Linq для NHibernate?

Изменить:

Я попробовал добавить к свойству IEntity class RowNumber и отобразить это на hbm как

  <property name="RowNumber" formula="rownum" />

Но после

  var index = query.Where( x => x.Name == "testName")
                   .Select( x => x.RowNumber)
                   .FirstOrDefault();

Всегда получать 1 значение

  • 0
    Я предполагаю, что Oracle? rownum основе rownum лежит позиция строки в его наборе результатов, поэтому, если он rownum на верхнем уровне запроса, который возвращает только один результат, он может быть равен 1 .
  • 0
    @Damien_The_Unbeliever. Ты прав. Если блок, where name='testName' будет на одном уровне с rownum - результат всегда будет 1
Показать ещё 1 комментарий
Теги:
linq
nhibernate
linq-to-nhibernate

1 ответ

1

Не можете ли вы просто отфильтровать запрос напрямую?

IQuerable<IEntity> query = dataRep.Get<IEntity>()
                                  .Query()
                                  .FirstOrDefault(x => x.Name == "testName");

Edit:

Чтобы получить элемент, вы можете проектировать его в анонимный тип:

var query = (from data in dataRep.Get<IEntity>().Query()
             where Name == "testName"
             select new
             {
                 id = data.id,
                 rowNumber = data.rowNumber
             }).FirstOrDefault();
  • 0
    Мне нужно получить индекс предмета, а не предмет.
  • 0
    @Kronos - отредактировано, чтобы показать, как вы можете проецировать в анонимный тип, чтобы получить номер идентификатора / строки, как указано в вашем SQL.
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню