2010-01-15 19 views
2

我需要一些在VB.Net中的LINQ查询的帮助。简单的LINQ问题 - 如何遍历一个组?

我有这个简单的组声明:

Dim drivers = From d In DriversOwners _ 
    Group d By Key = d.UnitNumber Into Group _ 
    Select Key, DriverGroup = Group 

这工作,并返回我,我需要使用的数据。现在我想使用For Each构造遍历组。像这样的:“‘X’是不是在这种情况下访问,因为它是‘朋友’”

For Each x In drivers 

Next 

然而,编译器乱叫我,告诉我,

有人知道我在做什么错在这里?

在此先感谢。

+0

我添加了另一个Linq查询,我从MS示例页面复制,它给我的错误: 'Object'类型的表达式是不可查询的。确保您不缺少LINQ提供程序的程序集引用和/或命名空间导入。 但我已经添加的所有引用 - System.Core程序,将System.Data.Linq,System.Xml.Linq的...... 我也有所有的Imports语句在类的顶部... 我把我的头发拉出来。 – camainc 2010-01-15 20:03:39

回答

1

我不知道,如果你已经解决了这个与否。今天我遇到了完全相同的问题,结果为我工作的是在For Each循环中不使用单字母变量。我的代码是一样的你:

For Each x In a 
... 
Next 

当我改变了代码以下它的工作:

For Each retVal in a 
... 
Next 

我还发现任何单个字母的变量相同的“朋友”的错误行为。

我不知道为什么它的行为如此,但我想我会通过这一点,以防这个问题仍然存在。

+0

谢谢,这就是我最终做的。我会将您的答案标记为正确答案,因为这是我能够使代码正常工作的唯一方法。 – camainc 2010-03-20 19:27:41

2

在我看来,变量x是早些时候声明的 - 作为类字段,方法参数或局部变量。

我对不对?

+0

不是 - 我故意使用了“x”,因为它没有在其他地方使用过。事实上,用什么单字母变量代替“x”并不重要,我得到了同样的错误。 当我尝试用一​​个单词替换“x”,如“foo”时,我得到一个不同的错误:“名称'foo'未声明。“ – camainc 2010-01-15 18:57:41

+0

只是为了好奇心,你可以改变每行为”For Each x As Object In drivers“,看看是否给你一个错误?我已经复制了你的代码的一个简单版本,并使用你提供的确切的LINQ语句和不能让它提高那个错误 – 2010-01-15 19:23:01

+0

当然,那是有效的,但除了五个左右的默认对象方法外,我无法对任何东西做任何事情 看起来好像我可能会丢失一个程序集引用或者其他东西。这是一个.Net 2.0项目,我改变了目标.Net 3.5。我添加了所有的LINQ参考,但仍然有些东西似乎是不正确的。 – camainc 2010-01-15 19:36:28

5

挖掘和挖掘后,我终于找到了这个问题的答案。谈论钝角!

Enabling LINQ in a .NET Framework 3.5 Project

When you move a project to .NET Framework 3.5, a reference to System.Core and a project-level import for System.Linq (in Visual Basic only) are added automatically. If you want to use LINQ features, you must also turn Option Infer on (in Visual Basic only) [my emphasis].

当我改变目标框架从2.0至3.5,Visual Studio中自动添加System.Core程序集,并自动导入System.Linq的命名空间。现在为什么在世界上它也没有将选项推到“开”?

http://msdn.microsoft.com/en-us/library/bb398197.aspx

+0

恭喜您解决您的问题。回答您的问题,请参阅备注这里http://msdn.microsoft.com/en-us/library/bb384665.aspx其中声明“如果您没有指定On或Off,则默认为On,用于在Visual Basic 2008中创建的项目。默认为Off r项目从早期版本升级。“ – 2010-01-15 20:39:55

+0

嗯,我认为解决了这个问题,但没有。原来的问题仍然存在。 – camainc 2010-01-15 21:15:06

+0

谢谢艾哈迈德,非常感谢。 – camainc 2010-01-15 21:15:42