2012-05-29 75 views
0

我以前从来没有用LINQ做过任何事情,但是我有使用MySQL的经验。这个LINQ查询有什么问题

我在第232页的Microsoft® ASP.NET 4 Step by Step这本书已经开始谈论LINQ这很酷了。

这本书已指示我输入我的第一个LINQ查询,我有,但它导致了从Visual Studio 19级的错误,因为whereorderbyselect命令无法识别。

下面是书中的代码:

bookcode

下面是我的代码(以截图的形式,所以你可以看到什么的Visual Studio不喜欢):

mycode

我在做什么错?

三江源

+2

您是否添加了'using system.Linq;'和'System.Core dll'的引用? –

+0

是的,它在截图中(如果你打开一个新的标签/窗口中的图像,你可以看到它在更高的分辨率) – JMK

+0

你在选择什么?在本书的例子中,他们从列表中选择了technologyDescriptor。在你的代码中没有使用任何集合。 –

回答

4

在你的Linq查询,在TechnologyDescriptor标签王氏的 “<>” 是barfing。您需要做的是为technologyDescriptor列表中的单个项目指定一个命名变量实例。例如:

GridView1.DataSource = from td in technologyDescriptor where td.TechnologyName.Contains(".Net") == true order by td.TechologyName.Length 
select td.TechnologyName.ToUpper(); 

你可以把这个查询类似于foreach循环是循环遍历technologyDesciptor列表和“TD”是每个循环

2

您有不必要的尖括号(<>)周围TechnologyDescriptor,对于一个。

1

它应该说: “从technologyDescriptor在......” 不from <TechnologyDescriptor>

2

您已经包围了你的变量名,technologyDescriptor,用尖括号。请从您的代码中删除这些括号。

+0

这只是一个问题。还有很多其他的。 –

1

您的可变用法是有点关闭。另外,是technologyDescriptor集合?

如果是这样,你的代码更改为:

GridView1.DataSource = from t in technologyDescriptor 
         where t.TechnologyName.Contains(".NET") 
         orderby t.TechnologyName.Length 
         select t.TechnologyName.ToUpper(); 
0

个人记录除了与问题的你linq查询,屏幕截图显示你有一个变量范围问题。具体而言,您使用technologyDescriptor来引用两个不同的东西。您的表单是否有称为“technologyDescriptor”的控件,或者是在部分类的另一部分中声明了该名称的字段?