Секреты LINQ. Автогенерируемые свойства. Инициализаторы объектов и коллекций, страница 25

xl.ActiveCell.Offset[1, 0].Select();

}

xl.Range["A1:B3"].Copy(); // xl.get_Range("A1:B3").Copy();

xl.Columns[1].AutoFit();

xl.Columns[2].AutoFit();

}

}

Для того, чтобы оценить вклад именованных параметров и параметров по умолчанию, сравните сигнатуру метода PasteSpecial с тем, как он был в действительности вызван в нашем коде.

void PasteSpecial(ref object IconIndex = null, ref object Link = null,

ref object Placement = null, ref object DisplayAsIcon = null,

ref object DataType = null, ref object IconFileName = null,

ref object IconLabel = null);

Новый тип данных dynamic также упрощает работу с Office COM Interop. Типы, используемые в Office представлены в C# как dynamic. Без использования типа dynamic вам пришлось бы работать так:

((Excel.Range)excel.Cells[1, 1]).Value2 = "ID";

С использованием этого типа мы работаем так:

X1.Cells[1, 1].Value = "ID";

Индексируемые свойства (Index Properties) упрощают обращение к ячейке до:

xl.Cells[1, 1] = "ID";

При работе с COM Interop сборки вида Primary Interop Assemblies (PIA) генерируются на основе COM-интерфейсов и упрощают разработку кода, но они сильно раздувают конечный продукт, так как содержат массу (возможно) неиспользуемых функций. Компилятор C# 4.0 позволяет имеет настройку No-PIA, которая позволяет включать в конечный код (distribution module) только используемую часть PIA.

Особенности настройки механизма DataBinding

¨  Создайте проект приложения типа Windows Forms по имени LinqBinding. Переименуйте файл и класс формы в MainForm.

¨  Добавьте в проект папку Data и принесите в нее файл с учебной базой данных Northwnd.mdf.

¨  В класс Program добавьте код, который создает открытую статическую переменную для хранения строки соединения с базой данных Northwnd.

static class Program

{

public readonly static string cnStr = "AttachDBFileName='" + FindFolder("Data") + "Northwnd.mdf" +

"';Server='.\\SQLEXPRESS';user instance=true;Integrated Security=SSPI;Connection Timeout=60";

static string FindFolder(string name)

{

string dir = Application.StartupPath;

for (char slash = '\\'; dir != null; dir = Path.GetDirectoryName(dir))

{

string res = dir.TrimEnd(slash) + slash + name;

if (Directory.Exists(res))

return res + slash;

}

return null;

}

[STAThread]

static void Main()

{

Application.EnableVisualStyles();

Application.Run(new FormEmployee());

}

}

¨  Добавьте в проект новый объект типа LINQ to SQL Classes по имени DBNorthWind. Студия добавит в проект файл DBNorthWind.dbml, который будет содержать схему источника данных.

¨  Откройте в студии окно Server Explorer и добавьте в узел Data Connections соединение с файлом базы данных NorthWind. с помощью сервера

¨  В окне Server Explorer раскройте узел дерева по имени Tables выделите все таблицы и перетащите их на поверхность окна редактора схем (DBNorthWind.dbml).

¨  Просмотрите код класса DBNorthWindDataContext, производного от DataContext, который сгенерирован студией и помещен в файл с расширением .designer.cs. Обратите внимание на то, что созданы классы, инкапсулирующие функциональность отдельных таблиц базы Northwind, например класс Employee.

¨  В контекстном меню окна редактора DBNorthWind.dbml выберите команду View Code (или нажмите F7). При этом студия создаст продолжение класса DBNorthWindDataContext в отдельном файле. Этот код, в отличие от кода в файле .designer.cs, вы можете редактировать и ваши изменения сохранятся. Заметьте, что изменения в

Additionally the Northwind.cs file has been modified from that generated by SQLMetal to include override ToString method on the Employee entity, this allows the DataGridView's ReportsToEmployee column to display a reasonable value.

Cannot implicitly convert type 'System.Linq.IOrderedQueryable<NorthwindMapping.Employee>' to 'System.Windows.Forms.BindingSource'. An explicit conversion exists (are you missing a cast?)

Visitor pattern