LINQ to Entities无法识别方法ElementAt(i);

Luc*_*oli 15 c# linq entity entity-framework

我正在使用该方法elementat(Int32)来获取查询结果的特定元素.

var mds = db.TDP_MissioniDestinazioni.Where(p => p.MissioneID == missioneRow.MissioneID);  

destinazioneRow = mds.ElementAt(i);
Run Code Online (Sandbox Code Playgroud)

LINQ to Entities无法识别方法'TimeEntModel.TDP_MissioniDestinazioni ElementAt [TDP_MissioniDestinazioni]
(System.Linq.IQueryable`1 [TimeEntModel.TDP_MissioniDestinazioni],Int32)'方法,并且此方法无法转换为商店表达式.

为什么我会收到此错误,如何解决?

Jon*_*eet 22

您是否乐于获取所有"早期"结果?如果是这样,要么调用ToList()缓存它们,要么AsEnumerable()在每次调用时获取它们,AsEnumerable只是强制编译器调用Enumerable.ElementAt而不是Queryable.ElementAt.

可能有更好的方法(例如使用Take或Skip) - 你能提供更多关于更大图片的信息吗?


Ste*_*ven 21

你可以简单地混合Skip并First做到这一点:

mds.Skip(i).First()
Run Code Online (Sandbox Code Playgroud)

  • 我认为你必须使用`.Skip(i)`而不是`i-1`,因为`.ElementAt(i)`从0开始.所以相当于`.ElementAt(0)`将是`.Skip(0 ).首先()`.不过,我差不多晚了三年. (6认同)
  • @Steven:不知道与mds.Skip(i - 1)相比,那个翻译会是什么样的.First()? (2认同)
  • @RodrigoWaltenberg:你是对的.我更新了答案. (2认同)