Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BD_redaktsia_2013.docx
Скачиваний:
4
Добавлен:
01.05.2025
Размер:
931.98 Кб
Скачать
  1. Linq to DataSet. Универсальные методы Field и SetField.

LINQ to DataSet реализует методы расширений класса DataRow для доступа к значениям столбцов: Field и SetField. Эти методы предоставляют разработчикам более простой доступ к значениям столбцов, особенно в отношении значений NULL.

Объект DataSet использует для представления значений NULL класс Value, тогда как LINQ использует поддержку платформой .NET Framework 2.0 типов, допускающих значения NULL. Использование существующего метода доступа столбцов в объекте DataRow требует приведения возвращаемого объекта к нужному типу. Если определенное поле в объекте DataRow может иметь значение NULL, необходимо явно проверить наличие значения NULL, поскольку при возвращении объекта Value и неявном приведении его к другому типу возникает исключение InvalidCastException.В следующем примере, если метод IsNull не использовался для проверки на значение NULL, возникнет исключение, если индексатор возвращает объект Value и пытается привести его к типу String.

C#

// Fill the DataSet.

DataSet ds = new DataSet();

ds.Locale = CultureInfo.InvariantCulture;

FillDataSet(ds);

DataTable products = ds.Tables["Product"];

var query =

from product in products.AsEnumerable()

where !product.IsNull("Color") &&

(string)product["Color"] == "Red"

select new

{

Name = product["Name"],

ProductNumber = product["ProductNumber"],

ListPrice = product["ListPrice"]

};

foreach (var product in query)

{

Console.WriteLine("Name: {0}", product.Name);

Console.WriteLine("Product number: {0}", product.ProductNumber);

Console.WriteLine("List price: ${0}", product.ListPrice);

Console.WriteLine("");

}

Метод Field предоставляет доступ к значениям столбцов в DataRow, а метод SetField устанавливает значения столбцов в DataRow.Оба метода, Field и SetField, обрабатывают типы, допускающие значения NULL, поэтому нет необходимости явно проводить проверку на значения NULL, как в предыдущем примере.Оба метода являются универсальными, поэтому приводить возвращенные данные к определенному типу не нужно. В следующем примере используется метод Field.

C#

// Fill the DataSet.

DataSet ds = new DataSet();

ds.Locale = CultureInfo.InvariantCulture;

FillDataSet(ds);

DataTable products = ds.Tables["Product"];

var query =

from product in products.AsEnumerable()

where product.Field&ltstring>("Color") == "Red"

select new

{

Name = product.Field&ltstring>("Name"),

ProductNumber = product.Field&ltstring>("ProductNumber"),

ListPrice = product.Field&ltDecimal>("ListPrice")

};

foreach (var product in query)

{

Console.WriteLine("Name: {0}", product.Name);

Console.WriteLine("Product number: {0}", product.ProductNumber);

Console.WriteLine("List price: ${0}", product.ListPrice);

Console.WriteLine("");

}

Обратите внимание, что тип данных, определяемый в универсальном параметре T метода Field и метода SetField, должен совпадать с типом базового значения.В противном случае возникнет исключение InvalidCastException.Указанное имя столбца также должно совпадать с именем столбца в DataSet, в противном случае возникнет исключение ArgumentException.В обоих случаях исключения возникают во время выполнения при перечислении данных в ходе выполнения запроса.

Метод SetField сам по себе не выполняет преобразования типов.Однако это не означает, что преобразование типов не происходит.Метод SetField реализует поведение ADO.NET 2.0 класса DataRow.Преобразование типов может быть выполнено объектом DataRow, а преобразованное значение затем будет сохранено в объекте DataRow.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]