2012-05-29 72 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」的控件,或者是在部分類的另一部分中聲明瞭該名稱的字段?