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

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

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

В примерах в этой статье используется пример базы данных Northwind. Чтобы получить базу данных, см. раздел Загрузка образцов баз данных.

Заметка

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

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

  1. В Visual Studio откройте обозреватель серверов /обозревателя баз данных, щелкнув обозреватель серверов/обозреватель баз данных в меню Представление.

  2. Щелкните правой кнопкой мыши Подключения к данным в Обозревателе серверов /Обозревателя баз данных, а затем щелкните Добавить подключение.

  3. Укажите правильное подключение к контрольной базе данных Northwind.

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

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

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

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

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

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

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

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

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

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

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

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

  1. Из панели элементовперетащите элемент управления DataGridView в форму Form1, которая является формой Windows Form по умолчанию для вашего проекта.

  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
    

См. также