2010-07-07 39 views
7

我有以下Linq查詢:Linq錯誤 - 「NotSupportedException:用於查詢運算符的不支持的重載'選擇'」

var tmp = 
    from container in Container 
    join containerType in ContainerType on container.ContainerType equals containerType 
    where containerType.ContainerTypeID == 2 
    select new { ContainerID = container.ContainerID, TypeID = container.ContainerTypeID}; 

var results = tmp.Select((row, index) => new { row.ContainerID, row.TypeID, ContainerIndex = index }) 

原樣,這個工作正常。如果我添加以下內容,那麼我可以在LinqPad中看到結果,我得到了此消息標題中描述的錯誤:

results.Dump(); 

此錯誤不是LinqPad錯誤,它來自Linq,我不喜歡不明白這意味着什麼。

謝謝。

+0

也看到我對喬恩的回答評論你剛纔的問題。 – 2010-07-07 12:39:05

回答

15

好吧,我還沒有意識到Container是一個LINQ to SQL數據源開始。基本上它沒有將第二個投影轉換爲SQL。

所以,你要做到這一點位在.NET,而不是 - 你可以強制它使用Enumerable.SelectAsEnumerable

var results = tmp.AsEnumerable() 
       .Select((row, index) => new { row.ContainerID, row.TypeID, 
               ContainerIndex = index }); 
+0

對不起,我應該提到這一點。謝謝你的幫助。 – 2010-07-07 12:40:02

+0

我遇到過同樣的麻煩,並且使用'.AsEnumerable()'也適用。 +1。但爲什麼它有效?爲什麼從'System.Data.Linq.Table '我不能迭代/選擇新的對象? – markzzz 2015-07-15 13:20:42

+0

@markzzz:這是投影發生的地方。雖然這是一個可查詢的問題,但您要求您將所做的任何事情轉換爲SQL ......而在您使用了'AsEnumerable'之後,這意味着所有事情都是在本地完成的。 – 2015-07-15 13:25:22

相關問題