2012-05-29 5 views
0

Я никогда ничего не делал с LINQ раньше, однако у меня есть опыт работы с MySQL.Что не так с этим запросом LINQ

Я на странице 232 из Microsoft® ASP.NET 4 Step by Step, и книга начала говорить о LINQ, которая крута.

Книга поручил моему ввести свой первый запрос LINQ, который у меня есть, однако это привело к 19 ошибок из Visual Studio, так как команды where, orderby и select не распознаются.

Ниже приведен код из книги:

bookcode

Ниже мой код (в виде скриншота, так что вы можете увидеть, что Visual Studio не нравится):

mycode

Что я делаю неправильно?

Thankyou

+2

Вы добавили 'using system.Linq;' и ссылку на 'System.Core dll'? –

+0

Да, это на скриншоте (если вы открываете изображение в новой вкладке/Окно, вы можете увидеть его в более высоком разрешении) – JMK

+0

Что вы выбираете? В примере из книги они выбирают технологиюDescriptor из списка. В вашем коде нет каких-либо коллекций. –

ответ

4

В запросе Linq, в TechnologyDescriptor тег изготовителе "<>" ненадежен. Что вам нужно сделать, это указать именованный экземпляр переменной для отдельного элемента в списке technologyDescriptor. Например:

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

Вы можете думать об этом запросе, как аналогично циклу Еогеасп, который обхвата над списком technologyDesciptor и «ТД» является отдельная запись для каждого цикла

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», или поле этого имени, объявленное в другой части частичного класса?