Пример 5 . Язык интегрированных запросов linq (с версии c#3)
Задача языка LINQ– облегчить написание запросов для нескольких источников данных. По синтаксису этот язык близок кSQL.
Реализация (С# 3). Фильтрация коллекции
Помимо запросов используется неявно типизированная локальная переменная.
static void Main(string[] args)
{
List<Product> list = Product.GetSampleProducts();
list.ForEach(Console.WriteLine);
Console.WriteLine();
var filtered = from Product p in list
where p.Price > 10
select p;
foreach (Product product in filtered)
{
Console.WriteLine(product);
}
Console.Read();
}
Реализация (С# 4). Запросы XML
using System.Xml;
using System.Xml.Linq;
<?xml version="1.0" encoding="utf-8" ?>
<Data>
<Products>
<Product Name ="West Side Story" Price ="9.99 "/>
<Product Name ="Assasins" Price ="14.99 "/>
<Product Name ="Frogs" Price ="13.99 "/>
<Product Name ="Sweeney Todd" Price ="10.99 "/>
</Products>
</Data>
XDocument doc = XDocument.Load("data.xml");
var filtered = from p in doc.Descendants("Product")
where (decimal)p.Attribute("Price") > 10
select new
{
ProductName = (string)p.Attribute(“Name”);
};
foreach (var v in filtered)
{
Console.WriteLine(v.ProductName);
}
Пример 6. Модель com и динамическая типизация
Главной идей версии С#4 является тема совместимости. Это подразумевает работу как со старой технологией COM, так и с элементами динамических языков, выполняющихся в исполняющей среде динамического языка (DynamicLanguageRuntime–DLR)
Задача 1. Экспорт списка продуктов в электронную таблицу Excel.
Необходимо добавить ссылку проекта на Microsoft.CSharpдля обеспечения внедрения в основной код соответствующих частей основной сборки взаимодействия (PrimaryInteropAssembly–PIA). Более того в свойствах ссылки на пространство именExcelсвойствоImbeded Interop Typeнеобходимо установить в значениеtrue. Типы пространства именInteropстановятся в этом случае динамическими и не требуют явного преобразования.
using Microsoft.Office.Interop.Excel;
var app = new Application{Visible = false};
Workbook workbook = app.Workbooks.Add();
Worksheet worksheet = (Worksheet)app.ActiveSheet;
int row = 1;
foreach (var product in Product.GetSampleProducts().Where(p => p.Price != null))
{
worksheet.Cells[row, 1] = product.Name.ToString();
worksheet.Cells[row++, 2] = product.Price.ToString();
}
workbook.SaveAs(Filename: "F:\\demo.xls",
FileFormat: XlFileFormat.xlWorkbookNormal);
app.Application.Quit();
Литература: Скит Дж. C# Программирование для профессионалов