Практическое руководство. Фильтрование результатов запроса с помощью LINQ (Visual Basic)

Language-Integrated запрос (LINQ) упрощает доступ к данным базы данных и выполнение запросов.

В следующем примере показано, как создать приложение, которое выполняет запросы к базе данных SQL Server и фильтрует результаты по определенному значению с помощью Where предложения. Дополнительные сведения см. в предложении Where.

В примерах в этом разделе используется пример базы данных Northwind. Если база данных не установлена на компьютере разработчика, загрузите ее с веб-узла Центра загрузки Майкрософт. Инструкции см. в разделе "Скачивание примеров баз данных".

Примечание

Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Персонализация среды IDE.

Создание подключения к базе данных

  1. В Visual Studio откройте обозреватель Server ExplorerDatabase/, щелкнув обозреватель ServerExplorerDatabase/ в меню "Вид".

  2. Щелкните правой кнопкой мыши подключения к данным в обозревателе ServerExplorerDatabase/ и выберите команду "Добавить подключение".

  3. Укажите допустимое подключение к образцу базы данных Northwind.

Добавление проекта, содержащего файл LINQ to SQL

  1. В меню Файл окна Visual Studio наведите указатель мыши на пункт Создать и щелкните Проект. Выберите Visual Basic Windows Forms приложение в качестве типа проекта.

  2. В меню Проект выберите Добавить новый элемент. Выберите шаблон элемента LINQ to SQL Classes.

  3. Задайте файлу имя northwind.dbml. Нажмите кнопку Добавить. Откроется реляционный конструктор объектов (конструктор O/R) для файла northwind.dbml.

Добавление таблиц для запроса в конструктор объектов ввода-вывода

  1. В обозревателе ServerExplorerDatabase/ разверните подключение к базе данных Northwind. Разверните папку Таблицы.

    Если вы закрыли конструктор O/R, его можно повторно открыть, дважды щелкнув файл northwind.dbml, добавленный ранее.

  2. Щелкните таблицу Customers и перетащите ее в левую область конструктора. Щелкните таблицу "Заказы" и перетащите ее в левую область конструктора.

    Конструктор создает новые Customer объекты и Order объекты для проекта. Обратите внимание, что конструктор автоматически обнаруживает связи между таблицами и создает дочерние свойства для связанных объектов. Например, IntelliSense покажет, что Customer объект имеет Orders свойство для всех заказов, связанных с этим клиентом.

  3. Сохраните изменения и закройте конструктор.

  4. Сохраните проект.

Добавление кода для запроса к базе данных и отображение результатов

  1. На панели элементов перетащите DataGridView элемент управления на форму по умолчанию Windows для проекта Form1.

  2. Дважды щелкните Form1, чтобы добавить код в Load событие формы.

  3. При добавлении таблиц в конструктор объектов O/R конструктор добавил DataContext объект для проекта. Этот объект содержит код, который требуется для доступа к этим таблицам, помимо отдельных объектов и коллекций для каждой таблицы. Объект DataContext проекта называется на основе имени DBML-файла. Для этого проекта DataContext объект называется northwindDataContext.

    Вы можете создать экземпляр DataContext кода и запросить таблицы, заданные конструктором O/R.

    Добавьте следующий код в Load событие, чтобы запросить таблицы, предоставляемые в качестве свойств контекста данных. Запрос фильтрует результаты и возвращает только клиентов, расположенных в London.

    Dim db As New northwindDataContext
    
    Dim customers_London = From cust In db.Customers
                           Where cust.City = "London"
                           Select cust.CustomerID, cust.CompanyName,
                                  OrderCount = cust.Orders.Count,
                                  cust.City, cust.Country
    
    DataGridView1.DataSource = customers_London
    
  4. Нажмите клавишу F5, чтобы запустить проект и просмотреть результаты.

  5. Ниже приведены некоторые другие фильтры, которые можно попробовать.

    Dim companies_H = From cust In db.Customers
                      Where cust.Orders.Count > 0 And
                            cust.CompanyName.StartsWith("H")
                      Select cust.CustomerID, cust.CompanyName,
                             OrderCount = cust.Orders.Count,
                             cust.Country
    
    Dim customers_USA = From cust In db.Customers
                        Where cust.Orders.Count > 15 And
                              cust.Country = "USA"
                        Select cust.CustomerID, cust.CompanyName,
                               OrderCount = cust.Orders.Count,
                               cust.Country
    

См. также раздел