У меня есть таблица с 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
значение
Не можете ли вы просто отфильтровать запрос напрямую?
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();
rownum
основеrownum
лежит позиция строки в его наборе результатов, поэтому, если онrownum
на верхнем уровне запроса, который возвращает только один результат, он может быть равен1
.where name='testName'
будет на одном уровне сrownum
- результат всегда будет1