2010-02-26 204 views
11

我正在使用方法elementat(Int32)来获取查询结果的特定元素。LINQ to Entities不识别方法ElementAt(i);

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

destinazioneRow = mds.ElementAt(i); 

LINQ实体无法识别方法 'TimeEntModel.TDP_MissioniDestinazioni 的ElementAt [TDP_MissioniDestinazioni]
(System.Linq.IQueryable`1 [TimeEntModel.TDP_MissioniDestinazioni], 的Int32)' 方法,和此方法无法翻译成商店 表达式。

为什么我得到这个错误,我该如何解决?

回答

20

您是否乐意获取所有“早期”结果?如果是这样,请拨打ToList()来缓存它们,或拨打AsEnumerable()以在每次通话中获取它们,而AsEnumerable只是强制编译器拨打Enumerable.ElementAt而不是Queryable.ElementAt的方式。

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

16

你可以简单地混合SkipFirst这样的伎俩:

mds.Skip(i).First() 
+2

@Steven:任何想法的翻译将被像mds.Skip(I - 1)相比。首先()? – 2010-02-26 14:33:50

+1

@Jon:希望EF会为此产生相同的SQL代码,但我的教育猜测是你的'mds.Skip(i-1).First()'会产生更高效的SQL。好的! – Steven 2010-02-26 15:23:21

+6

因为'.ElementAt(i)'从0开始,所以我认为你必须使用'.Skip(i)'而不是'i-1'。所以相当于'.ElementAt(0)'是'.Skip 0)。首先()'。不过,我已经快三年了。 – 2012-12-20 11:33:09

相关问题