Вторая половина ответов на вопросы (987661), страница 9
Текст из файла (страница 9)
IEnumerable<string> filteredNames =
from n in names
where n.Contains(“a”)
select n;
Лямбда-синтаксис и синтаксис, облегчающий восприятие, дополняют друг друга.
74. Обработка данных из стандартного класса List средствами LINQ
Допустим, перед нами стоит тривиальная с точки зрения программирования задача: необходимо сделать выборку данных из некоего массива (скажем, содержащего натуральные числа) по определенному критерию (только четные), а результат вывести в упорядоченном виде.
Традиционный подход предусматривает просмотр массива посредством цикла, выбор элементов, удовлетворяющих критерию, а затем их сортировку (или постепенное добавление в заведомо упорядоченный список). Реализацию в виде консольной программы демонстрирует Листинг 1 (код в комментариях не нуждается, разве что следует обратить внимание, что для сохранения результатов в виде типизированного списка использовались появившиеся в .NET 2.0 обобщения).
В реляционных СУБД (благодаря SQL) подобные задачи решаются куда элегантнее: вместо последовательного перебора данных достаточно описать искомый результат, а декларативный стиль запроса позволяет «уместить» в нем сразу несколько действий. То же самое, по сути, обеспечивает и LINQ. В Листинге 2 цикл для выборки элементов по критерию и последующей сортировки результата заменяет всего одна конструкция, которая по форме и ключевым словам очень сильно напоминает SQL – это и есть LINQ-запрос.
static void Main(string[] args){int[] arr = { 10, 5, 13, 18, 4, 24, 65, 41, 30 }; List<int> evens = new List<int>(); foreach (var number in arr){if (number % 2 == 0)evens.Add(number);} evens.Sort(); foreach (int number in evens)Console.WriteLine(number);}
Выборка и формирование упорядоченного списка элементов массива с применением LINQstatic void Main(string[] args){int[] arr = { 10, 5, 13, 18, 4, 24, 65, 41, 30 }; var evens =from number in arrwhere number % 2 == 0orderby numberselect number; foreach (int number in evens)Console.WriteLine(number); }
Добавление источника данных (еще пример):
public class Student
{
public string First { get; set; }
public string Last { get; set; }
public int ID { get; set; }
public List<int> Scores;
}
// Create a data source by using a collection initializer.
static List<Student> students = new List<Student>
{
new Student {First="Svetlana", Last="Omelchenko", ID=111, Scores= new List<int> {97, 92, 81, 60}},
new Student {First="Claire", Last="O’Donnell", ID=112, Scores= new List<int> {75, 84, 91, 39}},
new Student {First="Sven", Last="Mortensen", ID=113, Scores= new List<int> {88, 94, 65, 91}},
new Student {First="Cesar", Last="Garcia", ID=114, Scores= new List<int> {97, 89, 85, 82}},
new Student {First="Debra", Last="Garcia", ID=115, Scores= new List<int> {35, 72, 91, 70}},
new Student {First="Fadi", Last="Fakhouri", ID=116, Scores= new List<int> {99, 86, 90, 94}},
new Student {First="Hanying", Last="Feng", ID=117, Scores= new List<int> {93, 92, 80, 87}},
new Student {First="Hugo", Last="Garcia", ID=118, Scores= new List<int> {92, 90, 83, 78}},
new Student {First="Lance", Last="Tucker", ID=119, Scores= new List<int> {68, 79, 88, 92}},
new Student {First="Terry", Last="Adams", ID=120, Scores= new List<int> {99, 82, 81, 79}},
new Student {First="Eugene", Last="Zabokritski", ID=121, Scores= new List<int> {96, 85, 91, 60}},
new Student {First="Michael", Last="Tucker", ID=122, Scores= new List<int> {94, 92, 91, 91} }
};
// studentQuery is an IEnumerable<Student>
var studentQuery =
from student in students
where student.Scores[0] > 90
select student;
MSDN
75. Принципы стыковки Visual Studio с базами данных
Visual Studio предоставляет средства для подключения приложения к данным из разнообразных источников, таких как базы данных, веб-службы и объекты. При использовании средств разработки структуры данных в Visual Studio часто не требуется явно создавать объект подключения для формы или компонента. Объект подключения обычно создается в результате завершения одного из мастеров данных или перетаскивания объектов данных на форму. Чтобы подключить приложение к данным в базе данных, веб-службе или объекте, запустите Мастер конфигурации источников данных, выбрав элемент Добавить новый источник данных в Окно "Источники данных".
В следующей диаграмме показан стандартный набор операций при подключении к данным при помощи запроса к адаптеру таблиц для выборки данных и их отображения на форме приложения Windows.
При использовании Visual Studio подключения настроены с помощью Диалоговое окно "Добавить/Изменить подключение" (вкладка "Общие"). Диалоговое окно Добавить подключение появляется при редактировании или создании соединений в одном из мастеров данных, в Обозревателе серверов/Обозревателе баз данных или при изменении свойств соединения в окне Свойства.
Подключения данных автоматически настраиваются при выполнении одного из следующих действий:
Действие | Описание |
Запуск Мастер конфигурации источников данных. | Подключения настраиваются при выборе пути к базе данных в Мастере настройки источника данных. Дополнительные сведения см. в разделе Практическое руководство. Подключение к данным в базе данных. |
Запуск Мастер настройки адаптера таблицы. | Подключения создаются в Мастере конфигурации адаптера таблицы. Дополнительные сведения см. в разделе Практическое руководство. Создание адаптера таблицы. |
Запуск Мастер настройки запроса адаптера таблицы. | Подключения создаются в Мастере конфигурации запросов к адаптеру таблиц. Дополнительные сведения см. в разделе Практическое руководство. Создание запросов TableAdapter. |
Перетаскивание элементов из Окно "Источники данных" на форму Конструктор компонентов. | Объекты подключения создаются при перетаскивании элементов из окна Источники данных вWindows Forms Designer или Конструктор компонентов. Дополнительные сведения см. в разделе Отображение данных на форме в приложениях Windows. |
Добавление новых подключений к данным в Обозревателе серверов/Обозревателе баз данных. | Подключения к данным в Обозревателе серверов/Обозревателе баз данных отображаются в списке доступных подключений в мастерах данных. Дополнительные сведения см. в разделе Практическое руководство. Добавление новых подключений к данным в Обозревателе серверов/Обозревателе баз данных. |
Двумя основными способами подключений являются Open и Close. В методе Open используются сведения свойства ConnectionStringдля связи с источником данных и установки открытого подключения. Метод Close завершает подключение. Закрытие подключений необходимо, поскольку большинство источников данных поддерживают только ограниченное число открытых подключений и на открытые подключения отвлекаются ценные системные ресурсы.
При работе с Адаптер таблицы, DataAdapter или командами данных нет необходимости явно открывать и закрывать подключение. При вызове метода этих объектов (например, Fill или Update), метод проверяет наличие уже открытого подключения. Если подключение не открыто, адаптер открывает его, выполняет свои операции и вновь закрывает.
Методы, подобные методу Fill, открывают и закрывают подключение автоматически только в том случае, если оно еще не открыто. Если подключение открыто, методы используют его, но не закрывают. Это позволяет пользователю самостоятельно открывать или закрывать подключения. Это также можно делать, если имеется несколько адаптеров данных, которые совместно используют подключение. В этом случае открывать и закрывать подключение из каждого адаптера при вызове метода Fill было бы неэффективно. Вместо этого пользователь может открыть подключение, вызвать методы Fill для каждого адаптера, а затем закрыть подключение после завершения работы.
Подключение приложения к базе данных Microsoft Access происходит с помощью поставщика платформы .NET Framework для OleDB. Дополнительные сведения см. в разделе Общие сведения о локальных данных.
При подключении к данным в локальных файлах важно понять, как система работы с проектами в Visual Studio управляет этими файлами. Дополнительные сведения см. в разделе Практическое руководство. Управление локальными файлами данных в проекте.
Неважно, создается подключение данных в одном из мастеров данных или в Обозревателе серверов/Обозревателе баз данных, в любом случае процесс определения подключения одинаков; нужно выбрать источник данных в Диалоговые окна "Выбор источника данных" и "Смена источника данных" и добавить сведения о подключении в Диалоговое окно "Добавить/Изменить подключение" (вкладка "Общие").
Для создания подключения к базе данных Access
В диалоговом окне Выбор источника данных выберите Файл базы данных Microsoft Access и нажмите кнопку ОК.
Если открылось диалоговое окно Добавить соединение и параметру Источник данных не присвоено значение Файл базы данных Microsoft Access, то щелкните Изменить для открытия диалогового окна Выбор/изменение источника данных. Дополнительные сведения см. в разделе Диалоговые окна "Выбор источника данных" и "Смена источника данных".
-
Введите путь к файлу базы данных, к которой требуется доступ, или нажмите кнопку Обзор, чтобы найти файл базы данных.
-
Введите учетные данные, если таковые необходимы для базы данных. Дополнительные сведения см. в разделе Диалоговое окно "Добавить/Изменить подключение" (Microsoft Access).
-
Нажмите кнопку OK.
Одним из наиболее распространенных сценариев в разработке приложений является отображение данных на форме в приложении Windows. Можно отобразить данные на форме, перетаскивая элементы из Окно "Источники данных" на форму. В этом пошаговом руководстве создается простая форма, в которой отображаются данные из одной таблицы в нескольких отдельных элементах управления. В этом пошаговом руководстве используется таблица Customers из учебной базы данных "Борей".
MSDN
76. Использование языка LINQ для обработки баз данных
LINQ to DataSet упрощает и ускоряет запросы к данным, кэшированным в объекте DataSet. В особенности LINQ to DataSet упрощает создание запросов, позволяя писать их непосредственно на языке программирования, а не применять отдельный язык запросов. Это особенно полезно для разработчиков среды Visual Studio, которые теперь могут воспользоваться в своих запросах преимуществами проверки синтаксиса во время компиляции, статической типизации и поддержки технологии IntelliSense, обеспечиваемой средой Visual Studio.
Технология LINQ to DataSet также может использоваться для запросов к данным, находящимся в одном или нескольких источниках. Это удовлетворяет многим сценариям, требующим гибкости при представлении и обработке данных, таких как запросы к данным, прошедшим локальную статистическую обработку, и кэширование на среднем уровне в веб-приложениях. В частности, этот метод обработки требуется для универсальных приложений отчетности, анализа и бизнес-аналитики.
Технология LINQ to DataSet в первую очередь используются в методах расширений в классах DataRowExtensions и DataTableExtensions. Технология LINQ to DataSet построена на основе архитектуры ADO.NET 2.0 и использует ее, но не заменяет ADO.NET 2.0 в коде приложения. Существующий код ADO.NET 2.0 продолжит работать в приложении LINQ to DataSet. Связь между LINQ to DataSet и ADO.NET 2.0 и хранилищем данных показана на следующей схеме.
LINQ to DataSet упрощает и ускоряет запросы к данным, кэшированным в объекте DataSet. Эти запросы выражены на языке программирования, а не в виде строковых литералов, внедренных в код приложения. Это означает, что разработчикам не придется изучать отдельный язык запросов. Дополнительно LINQ to DataSet позволяет разработчикам Visual Studio работать более продуктивно, так как интегрированная среда разработки Visual Studio обеспечивает проверку синтаксиса во время компиляции, статическую типизацию и поддержку технологии IntelliSense для LINQ. LINQ to DataSet также используется для выполнения запросов к данным, находящимся в одном или нескольких источниках данных. Это делает возможными много сценариев, требующих гибкости в представлении и управлении данными. В частности, этот метод обработки требуется для универсальных приложений отчетности, анализа и бизнес-аналитики.
Перед запросом к объекту DataSet с помощью LINQ to DataSet нужно поместить в объект DataSet данные. Есть несколько способов загрузить данные в DataSet, таких как класс DataAdapter или LINQ to SQL. После того как в объекте DataSet появятся данные, к нему можно выполнять запросы. Составление запросов с использованием LINQ to DataSet похоже на использование LINQ (Language-Integrated Query) с другими источниками данных, поддерживающими LINQ. Запросы LINQ можно выполнять к одиночным таблицамDataSet или к нескольким таблицам с использованием стандартных операторов запроса Join и GroupJoin.