Мне нужен запрос EF, чтобы получить номер строки определенного объекта.
В настоящее время у меня это работает следующим образом:
private DbContext Context;
public int GetRowNumberQuery<TEntity>(int entityId)
{
var allEntities = this.Context.Set<TEntity>().ToList();
return allEntities
.Select((entity, index) => new { Index = index, Entity = entity })
.Where(x => x.Entity.Id == entityId)
.Select(x => x.Index)
.SingleOrDefault();
}
Очевидно, что это очень неэффективно, так как он получает список всех сущностей перед выбором индекса. Если я удалю .ToList() в первой строке, сделав все это запросом LINQ, он выйдет из строя при первом выборе с NotSupportedException, говоря:
LINQ to Entities не распознает метод «System.Linq.IQueryable
1[<>f__AnonymousType1
2[System.Int32,MyEntityType]] Select[MyEntityType,‹>f__AnonymousType12](System.Linq.IQueryable
1[MyEntityType], System.Linq.Expressions.Expression1[System.Func
3[MyEntityType,System.Int32,‹>f__AnonymousType1 `2[System.Int32,MyEntityType]]])', и этот метод нельзя преобразовать в выражение хранилища.
Подскажите, пожалуйста, как получить ROW_NUMBER определенного объекта? Или это невозможно, как этот довольно старый вопрос предлагает?