LINQ to DataSet
LINQ to DataSet представлява възможност да се пишат заявки към обекти, съдържащи се в DataSet
– това са познатите ни обекти от ADO.NET – DataTable, DataView, DataRow. Реално много
прилича на LINQ to Objects, защото все пак работим с
обекти. Това ни позволява да напишем следната заявка):
Northwind.ProductsDataTable
productsTable = new Northwind.ProductsDataTable();
var products = from dr in
productsTable
where dr.CategoriesRow.CategoryName == "Seafood"
select dr;
|
Забележете, че тук връзките между таблиците
остават както в нормален обект от тип DataSet, така че имаме достъп до parent обекта чрез свойството CategoriesRow. Обектите dr и CategoriesRow са наследници на класа DataRow. Още една малка подробност: за
свойствата на обект от тип DataRow е характерно, че get може
да хвърли изключение, което от своя страна не е добра практика за работа с
LINQ. Затова е добре да използваме метода DataRow.IsNull() при работа със свойства на
DataRow в LINQ to
DataSet.
На пръв поглед това подобрение не е голямо, но
самата комбинация на DataSet класовете
с възможностите на LINQ дава много възможности, които ги
няма при работа само с DataSet класовете. Ето някои от тях:
·
Създаване на заявка, като резултата връща нова
колона, която съдържа изчисление
·
Създаване на изглед в смисъла на SQL Server
– съдържащ колони от няколко таблици и др.
Ако погледнем следната диаграма[7], ще видим класовете от асемблито System.Data.DataSetExtensions.dll,
които подпомагат реализацията на LINQ to DataSet:

Както казахме и по-горе, LINQ заявката се преобразува до разширяващи методи, и затова нека погледнем
какви разширяващи методи са създадени към типовете от ADO.NET. Следната диаграма[7] показва
дефиницията на тези методи, които правят LINQ to DataSet
възможно:

Следваща част: LINQ to XML