Написание запросов на C# LINQ

Napisanie Zaprosov Na C Linq



Подобно SQL, в C# LINQ можно писать запросы, используя синтаксис запросов. Эти запросы используются в веб-приложениях базы данных C# для получения данных из базы данных и отображения в Интернете сторонним пользователям. В этом руководстве мы обсудим некоторые запросы LINQ, похожие на SQL. Для этого мы создадим список источников данных и применим в нем запросы.

Синтаксис запроса:

Давайте посмотрим на общий синтаксис:

от итератор в Источник данных
выбирать итератор ;

Здесь:







  1. Data_Source может быть списком, содержащим данные.
  2. Итератор используется для извлечения элементов из Data_Source.

Источник данных

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



с использованием Система ;
с использованием System.Collections.Generic ;
с использованием System.Linq ;
с использованием System.Коллекции ;

публичный сорт Расчеты
{
публичный статический пустота Основной ( )
{
// Создание списка
Список country_prices '=' новый Список ( ) {

// Добавляем 5 записей в список
новый Цены ( ) { элемент '=' 'Фрукты' ,расположение '=' 'США' , количество '=' 100 , расходы '=' 345,78 } ,
новый Цены ( ) { элемент '=' «Орехи» ,расположение '=' 'Индия' , количество '=' 200 , расходы '=' 3645,78 } ,
новый Цены ( ) { элемент '=' 'Другие' ,расположение '=' 'ВЕЛИКОБРИТАНИЯ' , количество '=' 500 , расходы '=' 90,68 } ,
новый Цены ( ) { элемент '=' 'масло' ,расположение '=' 'США' , количество '=' 100 , расходы '=' 345,78 } ,
новый Цены ( ) { элемент '=' 'Чили' ,расположение '=' 'США' , количество '=' 10 , расходы '=' 67,89 } ,
} ;


для каждого ( был я в country_prices )
{
Консоль . WriteLine ( я . элемент + ' ' + я . расположение + ' ' + я . количество + ' ' + я . расходы ) ;
}
}
}
публичный сорт Цены {
публичный нить элемент { получать ; набор ; }
публичный нить расположение { получать ; набор ; }
публичный инт количество { получать ; набор ; }
публичный двойной расходы { получать ; набор ; }
}

Записи:







Объяснение:

1. Создайте цены со следующими атрибутами:

2. Создайте еще один класс «Расчеты» с основным методом и создайте список country_prices с пятью записями.



Выбирать

По сути, «выбрать» — это оператор проекции, который выбирает атрибуты из указанного источника данных. Запрос начинается с «от». Затем мы указываем итератор, который перебирает источник данных. Затем указывается оператор «выбрать».

Синтаксис:

Все атрибуты: из итератора в Data_Source выберите итератор;

Конкретный атрибут: из итератора в Data_Source выберите iterator.attribute;

Пример 1:

Напишем запрос для выбора всех записей из списка.

с использованием Система ;
с использованием System.Collections.Generic ;
с использованием System.Linq ;
с использованием System.Коллекции ;

публичный сорт Расчеты
{
публичный статический пустота Основной ( )
{
// Создание списка
Список country_prices '=' новый Список ( ) {

// Добавляем 5 записей в список
новый Цены ( ) { элемент '=' 'Фрукты' ,расположение '=' 'США' , количество '=' 100 , расходы '=' 345,78 } ,
новый Цены ( ) { элемент '=' «Орехи» ,расположение '=' 'Индия' , количество '=' 200 , расходы '=' 3645,78 } ,
новый Цены ( ) { элемент '=' 'Другие' ,расположение '=' 'ВЕЛИКОБРИТАНИЯ' , количество '=' 500 , расходы '=' 90,68 } ,
новый Цены ( ) { элемент '=' 'масло' ,расположение '=' 'США' , количество '=' 100 , расходы '=' 345,78 } ,
новый Цены ( ) { элемент '=' 'Чили' ,расположение '=' 'США' , количество '=' 10 , расходы '=' 67,89 } ,
} ;

// выбор оператора в запросе
был данные '=' от я в country_prices
выбирать я ;

для каждого ( был я в данные )
{
Консоль . WriteLine ( я . элемент + ' ' + я . расположение + ' ' + я . количество + ' ' + я . расходы ) ;

}
}
}
публичный сорт Цены {
публичный нить элемент { получать ; набор ; }
публичный нить расположение { получать ; набор ; }
публичный инт количество { получать ; набор ; }
публичный двойной расходы { получать ; набор ; }
}

Выход:

Здесь мы не указали какой-либо атрибут в запросе «выбрать». Мы получили все атрибуты из запроса (данные) внутри цикла foreach с помощью итератора.

Пример 2:

Теперь получите элементы, указав атрибут элемента в операторе «выбрать». Запрос: « из i в country_prices выберите i.item ».

//оператор выбора для получения атрибута элемента в запросе
был данные '=' от я в country_prices
выбирать я . элемент ;

для каждого ( был я в данные )
{
Консоль . WriteLine ( я ) ;

}

Выход:

Линия №21 – Линия №29:

2. Где

Если вы хотите отфильтровать данные на основе некоторых условий/ов, вы можете использовать оператор «где» в запросе вместе с предложением «выбрать». Но сначала используется оператор «где», а затем указывается оператор выбора.

Синтаксис:

Давайте посмотрим, как использовать оператор «где» внутри запроса LINQ.

от итератор в Источник данных
где состояние / с
выбирать итератор . атрибут ;

Пример 1: Одно условие

Давайте отфильтруем записи на основе атрибута элемента. Используйте оператор равенства (==) в операторе «где» в качестве условия и сравните итератор с «Чили». Итак, выбраны записи, которые относятся к «Чили».

Запрос « от я в стране_цены
где i.item == «Чили»
выберите я”

//выбираем, где фильтровать записи
был данные '=' от я в country_prices
где я . элемент == 'Чили'
выбирать я ;

для каждого ( был я в данные )
{
Консоль . WriteLine ( я . элемент + ' ' + я . расположение + ' ' + я . количество + ' ' + я . расходы ) ;

}

Выход:

Есть только одна запись с пунктом «Чили».

Линия №21 – Линия №30:

Пример 2: Несколько условий

Давайте отфильтруем записи на основе атрибутов местоположения и количества. Количество должно быть больше 50 и меньше 300. Местоположение должно быть «США».

Запрос « от я в стране_цены
где i.количество > 50
где i.количество < 300
где i.location == «США»
выберите я”

//выбираем, где фильтровать записи, указав несколько условий
был данные '=' от я в country_prices
где я . количество > пятьдесят
где я . количество < 300
где я . расположение == 'США'
выбирать я ;

для каждого ( был я в данные )
{
Консоль . WriteLine ( я . элемент + ' ' + я . расположение + ' ' + я . количество + ' ' + я . расходы ) ;

}

Выход:

Есть две записи, соответствующие предыдущим условиям.

Линия №21 – Линия №32:

Пример 3: И (&&) Оператор

Мы можем указать оператор «и (&&)», чтобы указать несколько условий одновременно. Если все условия истинны, запрос возвращает записи, удовлетворяющие всем условиям.

В этом примере мы выбираем записи, если их количество больше 20, а стоимость равна 67,89.

Запрос « от я в стране_цены
где i.quantity < 20 && i.cost == 67,89
выберите я”

был данные '=' от я в country_prices
где я . количество < двадцать && я . расходы == 67,89
выбирать я ;

для каждого ( был я в данные )
{
Консоль . WriteLine ( я . элемент + ' ' + я . расположение + ' ' + я . количество + ' ' + я . расходы ) ;

}

Выход:

Есть только одна запись с количеством меньше 20 и стоимостью 67,89.

Линия №21 – Линия №29:

Пример 4: Или (||) Оператор

Оператор «или (||)» также используется для указания нескольких условий одновременно. Если хотя бы одно условие истинно, возвращаются записи, удовлетворяющие этому условию.

В этом примере мы выбираем записи, если количество больше 300 или местоположение «Токио».

Запрос « от я в стране_цены
где i.количество > 300 || i.location == «Токио»
выберите я”

был данные '=' от я в country_prices
где я . количество > 300 || я . расположение == 'Токио'
выбирать я ;

для каждого ( был я в данные )
{
Консоль . WriteLine ( я . элемент + ' ' + я . расположение + ' ' + я . количество + ' ' + я . расходы ) ;

}

Выход:

Имеется только одна запись с количеством больше 300 (соответствует первому условию).

Линия №21 – Линия №29:

3. Заказ по

Если вы хотите упорядочить записи, возвращаемые запросом LINQ, в порядке возрастания или убывания на основе значений любого из атрибутов, вы можете использовать в запросе оператор «упорядочить по». Вам нужно указать этот оператор перед оператором «выбрать».

Синтаксис:

Давайте посмотрим, как использовать оператор «order by» в запросе LINQ.

Восходящий порядок:

от итератор в Источник данных
заказ к итератор . атрибут Восходящий
выбирать итератор ;

В порядке убывания:

от итератор в Источник данных
заказ к итератор . атрибут нисходящий
выбирать итератор ;

Пример 1: Восходящий порядок

Выберите все атрибуты из источника данных (списка) и верните их в порядке возрастания на основе значений в атрибуте количества.

Запрос « от я в стране_цены
порядок по i.количеству по возрастанию
выберите я”

был данные '=' от я в country_prices
заказать через меня . количество Восходящий
выбирать я ;

для каждого ( был я в данные )
{
Консоль . WriteLine ( я . элемент + ' ' + я . расположение + ' ' + я . количество + ' ' + я . расходы ) ;

}

Выход:

Линия №21 – Линия №29:

Пример 2: В порядке убывания

Выберите все атрибуты из источника данных (списка) и верните их в порядке убывания на основе значений атрибута стоимости.

Запрос « от я в стране_цены
порядок по i.cost по убыванию
выберите я”

был данные '=' от я в country_prices
заказать через меня . расходы нисходящий
выбирать я ;

для каждого ( был я в данные )
{
Консоль . WriteLine ( я . элемент + ' ' + я . расположение + ' ' + я . количество + ' ' + я . расходы ) ;

}

Выход:

Линия №21 – Линия №29:

4. Ограничение

Ограничение в SQL ограничивает количество записей, возвращаемых запросом. Он возвращает верхние записи, возвращенные запросом. В LINQ мы можем добиться этого, используя Skip() с оператором Take(). Take() получает указанное количество записей. Skip() используется для указания начального номера записи. Таким образом, мы можем достичь «ограниченной» функциональности в LINQ.

Синтаксис:

( от итератор в Источник данных
выбирать итератор ) . Пропускать ( н ) . Брать ( н ) ;
  1. Skip() используется для пропуска записей и возврата оставшихся записей. Он принимает целое число, указывающее количество элементов, которые необходимо пропустить. В нашем случае это 0.
  2. Take() используется для получения «n» записей из первой записи.

Пример:

Выберите первые три записи из пяти, возвращаемых запросом.

Запрос « (от i в country_prices
выберите i).Пропустить(0).Взять(3)”

был данные '=' ( от я в country_prices
выбирать я ) . Пропускать ( 0 ) . Брать ( 3 ) ;

для каждого ( был я в данные )
{
Консоль . WriteLine ( я . элемент + ' ' + я . расположение + ' ' + я . количество + ' ' + я . расходы ) ;

}

}

Выход:

Линия №21 – Линия №28:

Заключение

Мы научились писать запросы на C# LINQ, похожем на SQL. В рамках этого руководства мы обсудили, как использовать оператор «выбрать» для выбора записей из источника данных. Для фильтрации записей, возвращаемых запросом, мы использовали оператор «где», указав условия. Затем мы узнали, как сортировать записи, возвращаемые запросом, с помощью оператора «упорядочить по». Наконец, чтобы ограничить количество записей, мы использовали операторы Skip() и Take().