2010-02-26 107 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

相關問題