2010-07-07 78 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

相关问题