【发布时间】:2015-02-28 15:56:37
【问题描述】:
我需要一个 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 查询,它会在第一个 Select 时失败,并带有 NotSupportedException 说:
LINQ to Entities 无法识别该方法 'System.Linq.IQueryable
1[<>f__AnonymousType12[System.Int32,MyEntityType]] 选择[MyEntityType,f__AnonymousType12](System.Linq.IQueryable1[MyEntityType], System.Linq.Expressions.Expression1[System.Func3[MyEntityType,System.Int32,f__AnonymousType1`2[System.Int32,MyEntityType]]])' 方法,并且该方法不能翻译成商店表达式。
您能告诉我如何获取特定实体的 ROW_NUMBER 吗? 还是像this 很老的问题所暗示的那样是不可能的?
【问题讨论】:
标签: c# .net linq entity-framework row-number