орки наступают БОРИС ВОЛЬФСОН Спецвыпуск: Хакер, номер #071, стр. 071-060-5 Fax = null }; db.Customers.Add(newCustomer); db.SubmitChanges(); Console.WriteLine(); Console.WriteLine("*** AFTER ***"); ObjectDumper.Write(q); Существует очень интересный механизм, который позволяет ускорить работу приложения и сократить его код – хранимые процедуры, или просто «хранимки». «Хранимка» - это откомпилированный код программы на SQL, который можно вызвать по имени и передать параметры. За счет чего достигается скорость, думаю, понятно, - откомпилированный код всегда исполняется быстрее интерпретируемого. Использовать «хранимки» стало довольно просто – достаточно обратиться к соответствующему методу: int count = db.CustomersCountByRegion("WA"); Console.WriteLine(count); Код очень короткий и быстрый. Чтобы понять механизм работы, посмотрим текст самой хранимой процедуры. Она принимает один строковый параметр, который считается регионом, затем делает запрос на выборку с подсчетом. ALTER PROCEDURE dbo.[Customers Count By Region] (@param1 NVARCHAR(15)) AS BEGIN SET NOCOUNT ON; DECLARE @count int SELECT @count = COUNT(*)FROM Customers WHERE Customers.Region = @Param1 RETURN @count END Те, кто работает с базами данных сейчас, наверняка используют классы DataSet. Хочу отметить, что весь код - под третью версию языка C#, так как LINQ отлично работает и с ними. Необходимо привести DataSet к нужному интерфейсу, а сам запрос практически не отличается от обычных. var numbers = testDS.Tables["Numbers"].ToQueryable(); var lowNums = from n in numbers where n.Field<int>("number") < 5 select n; Console.WriteLine("Numbers < 5:"); foreach (var x in lowNums) { Console.WriteLine(x[0]); } [напоследок.] Напишем код, который объединяет в себе все выше описанное. В качестве формата хранения данных выберем XML. Загрузим файл bib.xml, который есть в стандартной поставке LINQ. Он хранит информацию о книгах, из которой мы выдернем нужную нам. Выбирать будем книги, которые выпустило издательство Addison-Wesley после 1995 года. Результат в виде XML-файла выведем на консоль. XDocument bib = XDocument.Load(“bib.xml"); var result = new XElement("bib", from b in bib.Element("bib").Elements("book") where (string)b.Element("publisher") == "Addison-Wesley" && (int)b.Attribute("year") > 1995 select new XElement("book", new XAttribute("year",b.Attribute("year").Value), b.Element("title"))); Console.WriteLine(result); Таким методом можно извлекать данные из базы и упаковывать в массив или наоборот. [завершаем.] Главное значения LINQ – это облегчить программистам работу с данными. Теперь контейнеры, XML и базы данных обрабатываются единообразно, и мы можем получать данные из хранилища одного типа (или сразу нескольких) и класть в хранилище другого типа. Надеюсь, благодаря этому программы, которые работают с данными (то есть все программы :) ), станут короче, а код у них чище! |