Practical Language for Extracting Data from Source Codes and Preparing Them f...Denis Efremov
Talk at Yandex Perl Meetup (06 June 2018). The presentation is about how tools written in Perl can be used for verification of Linux kernel modules. Various types of source code transformations with style preservation, interactive callgraphs, report with various complexity metrics creation. How we use the tools in the AstraVer project for writing formal specifications (ACSL) on code and how it helps us with regulatory certification. The tools: https://github.com/evdenis/spec-utils
05 - Java. Collections Framework и GenericsRoman Brovko
Обзор стандартных коллекций и их реализации:
* Списки, стеки, очереди.
* Множества.
* Ассоциативные массивы.
Generics:
* Параметризация классов и методов
* Синтаксис и реализация в Java
"Formal verification of C code" Efremov D.V.
The talk covers the issue of developing correct software applying one of the types of static code analysis. The speaker will also address the matters of using such methods, their weaknesses and limitations, as well as the results they can guarantee.
PHDays VII, PDUG section, Moscow, May 24 2017.
"Формальная верификация кода на языке Си" Ефремов Д.В.
Доклад посвящен разработке корректного программного обеспечения с применением одного из видов статического анализа кода. Будут освещены вопросы применения подобных методов, их слабые стороны и ограничения, а также рассмотрены результаты, которые они могут дать. На конкретных примерах будет продемонстрировано, как выглядят разработка спецификаций для кода на языке Си и доказательство соответствия кода спецификациям.
Доклад представлен на конференции PHDays VII (2017) 24 мая в секции PDUG.
Practical Language for Extracting Data from Source Codes and Preparing Them f...Denis Efremov
Talk at Yandex Perl Meetup (06 June 2018). The presentation is about how tools written in Perl can be used for verification of Linux kernel modules. Various types of source code transformations with style preservation, interactive callgraphs, report with various complexity metrics creation. How we use the tools in the AstraVer project for writing formal specifications (ACSL) on code and how it helps us with regulatory certification. The tools: https://github.com/evdenis/spec-utils
05 - Java. Collections Framework и GenericsRoman Brovko
Обзор стандартных коллекций и их реализации:
* Списки, стеки, очереди.
* Множества.
* Ассоциативные массивы.
Generics:
* Параметризация классов и методов
* Синтаксис и реализация в Java
"Formal verification of C code" Efremov D.V.
The talk covers the issue of developing correct software applying one of the types of static code analysis. The speaker will also address the matters of using such methods, their weaknesses and limitations, as well as the results they can guarantee.
PHDays VII, PDUG section, Moscow, May 24 2017.
"Формальная верификация кода на языке Си" Ефремов Д.В.
Доклад посвящен разработке корректного программного обеспечения с применением одного из видов статического анализа кода. Будут освещены вопросы применения подобных методов, их слабые стороны и ограничения, а также рассмотрены результаты, которые они могут дать. На конкретных примерах будет продемонстрировано, как выглядят разработка спецификаций для кода на языке Си и доказательство соответствия кода спецификациям.
Доклад представлен на конференции PHDays VII (2017) 24 мая в секции PDUG.
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)Pavel Tsukanov
Расскажу зачем они вообще нужны. Пройдемся по технологиям и промоем им косточки. Рассмотрим достоинства и недостатки, а также где и когда лучше всего применять ту или иную ORM.
Приложения для Windows Phone: как мы это делаем #codefestActis Wunderman
Презентация руководителя отдела мобильных приложений Григория Никонова для конференции CodeFest 2013. Рассказ о нашем опыте в разработке мобильных приложений и, в частности, о том, как сэкономить время и усилия за счёт фреймворков.
Rempl — крутая платформа для крутых инструментов - Роман Дворнов (Avito)AvitoTech
Роман Дворнов (Avito)
Фронтенд усложняется с каждым днем, и уже не представить жизнь разработчика без инструментов. Инструментов становится все больше, но нельзя сказать, что их достаточно. Если у вас собственный стек или технологическое решение, вам рано или поздно потребуется сделать свой инструмент. Это не так просто! Особенно если вы захотите интегрировать его интерфейс в браузерные Developer Tools, IDE, редакторы или открыть их на другом устройстве. Добавьте сюда проблему версионирования и другие сложности, и вам покажется, что задача неподъемная.
Но есть хорошая новость! Большинство из этих проблем решает Rempl — платформа для создания и использования удаленных инструментов (на самом деле не только инструментов). Сделаем небольшой обзор Rempl: что это, зачем нужно, какие проблемы решает. А также посмотрим примеры готовых решений, построенных на Rempl.
После докладов мы проведём дискуссионную панель на тему "Организация системы компонент", в которой примут участие докладчики, а также приглашенные эксперты.
Осуществим вводный экскурс в Node.JS. Действительно это что-то новое и гениальное? Что оно может, а что нет? Кому будет полезен? В каких случаях применять, а в каких нет? На все эти вопросы я постараюсь ответить в своём докладе.
Каким образом лучше организовать процесс интеграционного тестирования? Для проектов, где количество тестовых сценариев превышает несколько сотен, возникают проблемы:
с пониманием кода;
с точным представлением, что именно протестировано, а что нет;
какие случаи учтены в тестовых сценариях, а какие нет.
Использование SpecFlow для нашего проекта помогло решить все эти проблемы. Мы наладили процесс тестирования и оптимизировали написание тестовых сценариев.
Как настроить SpecFlow, организовать тестовые сценарии более логично и иметь список тестов на русском языке, который можно показать даже заказчику? Об этом будет подробно рассказано в докладе.
По материалам конференции .NET разработчиков http://www.dotnetconf.ru/Materialy/Priemochnie_testi_na_ogurce
1. Темы лекции: LINQ.
Практическое задание: LINQ.
Тренер: Игорь Шкулипа, к.т.н.
Платформа .Net и язык программирования C#.
Занятие 13
2. http://www.slideshare.net/IgorShkulipa 2
LINQ
Традиционно запросы к данным выражаются в виде простых строк без
проверки типов при компиляции или поддержки IntelliSense. Кроме
того, разработчику приходится изучать различные языки запросов для
каждого из типов источников данных: баз данных SQL, XML-
документов, различных веб-служб и т. д. LINQ делает запросы очень
удобной конструкцией языков C# и Visual Basic. Разработчики создают
запросы к строго типизированным коллекциям объектов с помощью
зарезервированных слов языка и знакомых операторов.
Language-Integrated Query (LINQ) - язык интегрированных запросов.
LINQ позволяет извлекать информацию из различных источников данных.
В основу LINQ положено понятие запроса, в котором определяется
информация получаемая из источника данных. После формирования
запроса происходит его выполнение.
Запрос представляет собой выражение, извлекающее данные из
источника данных. Запросы обычно выражаются на специальном
языке запросов.
Доступно несколько реализаций LINQ: LINQ to Objects, LINQ to SQL, LINQ
to DataSet, LINQ to Entities и LINQ to XML.
3. http://www.slideshare.net/IgorShkulipa 3
Пример
class PersoneInfo
{
public string Name { get; set; }
public string Surname { get; set; }
public string Middle { get; set; }
public DateTime BirthDate { get; set; }
public override string ToString()
{
return
String.Format
("{0} {1} {2} : {3}", Surname, Name, Middle, BirthDate);
}
}
4. http://www.slideshare.net/IgorShkulipa 4
Пример
static void Main(string[] args)
{
List<PersoneInfo> people = new List<PersoneInfo> {
new PersoneInfo{
Name="Ivan",
Surname="Ivanov",
Middle="Ivanovich",
BirthDate=DateTime.Parse("1/1/1980")},
new PersoneInfo{
Name="Petr",
Surname="Petrov",
Middle="Petrovich",
BirthDate=DateTime.Parse("2/2/1990")},
new PersoneInfo{
Name="Sidor",
Surname="Sidorov",
Middle="Sidorovich",
BirthDate=DateTime.Parse("3/3/1985")}
};
5. http://www.slideshare.net/IgorShkulipa 5
Пример
var resultQuery1 = from persone in people
where persone.BirthDate > DateTime.Parse("1/1/1985")
orderby persone.Surname, persone.Name
select new { Name = persone.Name, Surname = persone.Surname };
var resultQuery2 = from persone in people
where persone.BirthDate > DateTime.Parse("1/1/1985")
orderby persone.Surname, persone.Name
select persone;
foreach (var per in resultQuery1)
{
Console.WriteLine(per.ToString());
}
foreach (var per in resultQuery2)
{
Console.WriteLine(per.ToString());
}
Console.ReadKey();
}
{ Name = Petr, Surname = Petrov }
{ Name = Sidor, Surname = Sidorov }
Petrov Petr Petrovich : 02.02.1990 0:00:00
Sidorov Sidor Sidorovich : 03.03.1985 0:00:00
6. http://www.slideshare.net/IgorShkulipa 6
Расширяющие методы и лямбда-выражения
В пространстве имен System.Linq есть два статический класса, которые
содержат множество расширяющих методов – Enumerable и Queryable.
Классы Enumerable и Queryable предоставляют набор расширяющих
методов для интерфейсов IEnumerable и IQueryable соответственно.
Имена этих расширяющих методов совпадают с именами конструкций
запросов. Это не случайно, так как, в действительности, эти методы
реализуют операции запросов LINQ.
Интерфейс IQueryable предназначен для реализации поставщиками
запросов. Он реализуется только поставщиками, которые также
реализуют интерфейс IQueryable<T>. Если поставщик не реализует
IQueryable<T>, для его источника данных не могут использоваться
стандартные операторы запросов.
Интерфейс IQueryable наследует интерфейс IEnumerable, поэтому если он
представляет запрос, результаты этого запроса будут допускать
перечисление.
7. http://www.slideshare.net/IgorShkulipa 7
Тот же пример с расширяющими методами
var resultQuery3 = people
.Where(persone => persone.BirthDate > DateTime.Parse("1/1/1985"))
.OrderBy(persone => persone.Surname)
.OrderBy(persone => persone.Name)
.Select(persone => new { Name = persone.Name, Surname = persone.Surname });
var resultQuery4 = people
.Where(persone => persone.BirthDate > DateTime.Parse("1/1/1985"))
.OrderBy(persone => persone.Surname)
.OrderBy(persone => persone.Name)
.Select(persone => persone);
foreach (var per in resultQuery3)
{
Console.WriteLine(per.ToString());
}
foreach (var per in resultQuery4)
{
Console.WriteLine(per.ToString());
}
{ Name = Petr, Surname = Petrov }
{ Name = Sidor, Surname = Sidorov }
Petrov Petr Petrovich : 02.02.1990 0:00:00
Sidorov Sidor Sidorovich : 03.03.1985 0:00:00
8. http://www.slideshare.net/IgorShkulipa 8
Синтаксис LINQ
Каждое выражение запроса начинается с конструкции from, которая
объявляет переменную диапазона.
Конструкция from, похожа на оператор foreach в том, что она
осуществляет итерацию по элементам коллекции people, сохраняя на
каждом шаге очередной элемент коллекции в переменной persone.
После конструкции from следуют различные операции запроса для
фильтрации данных переменной диапазона.
В примере применяются операции where и orderby.
Выражение закрывается операцией проекции (select). Применение
операции проекции обычно приводит к созданию новой коллекции –
результата выполнения запроса.
101 LINQ Samples
Основные конструкции LINQ
10. http://www.slideshare.net/IgorShkulipa 10
Конструкция from
Каждый запрос начинается с конструкции from. Конструкция from – это
генератор, который определяет переменную диапазона - локальную
переменную, используемую для представления каждого элемента
входной коллекции, по мере применения к ней выражения запроса.
Выражения запроса может содержать более одной конструкции from.
Пример – генерация таблицы умножения.
var multTable = from a in Enumerable.Range(1, 10)
from b in Enumerable.Range(1, 10)
select new { A = a, B = b, AB = a * b };
foreach (var item in multTable)
{
Console.WriteLine("{0}*{1}={2}", item.A, item.B, item.AB);
}
1*1=1
1*2=2
1*3=3
1*4=4
1*5=5
1*6=6
...
10*6=60
10*7=70
10*8=80
10*9=90
10*10=100
11. http://www.slideshare.net/IgorShkulipa 11
Конструкция join
Конструкция join может использоваться для сопоставления данных из
двух различных источников.
class PersoneInfo
{
public string Name { get; set; }
public string Surname { get; set; }
public string Middle { get; set; }
public DateTime BirthDate { get; set; }
public string NationalityID { get; set; }
public override string ToString()
{
return String
.Format("{0} {1} {2} : {3}", Surname, Name, Middle, BirthDate);
}
}
class PersoneNationality
{
public string ID { get; set; }
public string Name { get; set; }
}
12. http://www.slideshare.net/IgorShkulipa 12
Пример join
List<PersoneInfo> people = new List<PersoneInfo> {
new PersoneInfo{
Name="Ivan",
Surname="Ivanov",
Middle="Ivanovich",
NationalityID="222",
BirthDate=DateTime.Parse("1/1/1980")},
new PersoneInfo{
Name="Petr",
Surname="Petrov",
Middle="Petrovich",
NationalityID="111",
BirthDate=DateTime.Parse("2/2/1990")},
new PersoneInfo{
Name="Sidor",
Surname="Sidorov",
Middle="Sidorovich",
NationalityID="111",
BirthDate=DateTime.Parse("3/3/1985")}
};
List<PersoneNationality> nationalities =
new List<PersoneNationality> {
new PersoneNationality{
ID= "111",
Name="Ukraine"},
new PersoneNationality{
ID="222",
Name="Russian"}
};
13. http://www.slideshare.net/IgorShkulipa 13
Пример join
var resultQuery = from persone in people
join nation in nationalities
on persone.NationalityID equals nation.ID
orderby nation.Name descending
select new
{
Name = persone.Name,
Surname = persone.Surname,
Middle = persone.Middle,
Nationality = nation.Name
};
foreach (var per in resultQuery)
{
Console.WriteLine("{0} {1} {2} - {3}",
per.Surname, per.Name, per.Middle, per.Nationality);
}
Petrov Petr Petrovich - Ukraine
Sidorov Sidor Sidorovich - Ukraine
Ivanov Ivan Ivanovich - Russian
14. http://www.slideshare.net/IgorShkulipa 14
Конструкция where
Конструкция where – это конструкция фильтров. Она следует за
конструкциями from и join.
Фильтры состоят из ключевого слова where, за которым следует
выражение условия.
var resultQuery1 =
from persone in people
where persone.BirthDate > DateTime.Parse("1/1/1985")
orderby persone.Surname, persone.Name
select new { Name = persone.Name, Surname = persone.Surname };
var resultQuery2 =
from persone in people
where persone.BirthDate > DateTime.Parse("1/1/1985")
orderby persone.Surname, persone.Name
select persone;
15. http://www.slideshare.net/IgorShkulipa 15
Конструкция orderby
Конструкция orderby используется для сортировки результатов запроса.
За ключевым словом orderby следует элемент, по значению которого
должна проводиться сортировка, обычно это какое-то свойство
переменной диапазона.
Сортировку можно выполнять как в порядке возрастания (ascending) так
и в порядке убывания (descending). Если ключевое слово явно не
указано, то принимается сортировка по возрастанию (ascending).
var resultQuery = from persone in people
join nation in nationalities
on persone.NationalityID equals nation.ID
orderby nation.Name descending,
persone.Name ascending,
persone.Surname
select new
{
Name = persone.Name,
Surname = persone.Surname,
Middle = persone.Middle,
Nationality = nation.Name
};
16. http://www.slideshare.net/IgorShkulipa 16
Конструкция select
Конструкция select служит для производства конечного результата
запроса. Она называется проектором, по этому проектирует
(транслирует) данные внутри запроса в форму, удобную для
применения.
Компилятор преобразует конструкцию select в вызов расширяющего
метода Select. Тело конструкции select преобразуется в лямбда-
выражение, передаваемое методу Select, который использует его для
производства каждого элемента результирующего набора.
var multTable = from a in Enumerable.Range(1, 10)
from b in Enumerable.Range(1, 10)
select new { A = a, B = b, AB = a * b };
17. http://www.slideshare.net/IgorShkulipa 17
Конструкция let
Конструкция let предоставляет новый локальный идентификатор, на
который можно ссылаться в следующей части запроса.
var letQuery = from persone in people
let fullName = persone.Name + " " +
persone.Middle + " " +
persone.Surname
orderby fullName descending
select fullName;
foreach (var fname in letQuery)
{
Console.WriteLine(fname);
}
Sidor Sidorovich Sidorov
Petr Petrovich Petrov
Ivan Ivanovich Ivanov
18. http://www.slideshare.net/IgorShkulipa 18
Конструкция group
Конструкция gourp является средством для разбиения входных данных
запроса на части.
Конструкция gourp - это проектор, который проектирует данные в
коллекцию интерфейсов IGrouping.
Интерфейс IGrouping определен в пространстве имен System.Linq и
унаследован от IEnumerable. По этому IGrouping можно применять
везде, где можно применять IEnumerable.
Интерфейс IGrouping включает свойство по имени Key, которое является
объектом, описывающим подмножество.
Каждый результирующий набор формируется применением операции
эквивалентности к входным данными Key.
19. http://www.slideshare.net/IgorShkulipa 19
Пример group
var groupQuery = from number in Enumerable.Range(0, 50)
group number by number % 2;
foreach (var group in groupQuery)
{
Console.WriteLine("nmod2={0}", group.Key);
foreach (var number in group)
{
Console.Write("{0}, ", number);
}
}
mod2=0
0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30,
32, 34, 36, 38, 40, 42, 44, 46, 48,
mod2=1
1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31,
33, 35, 37, 39, 41, 43, 45, 47, 49,
20. http://www.slideshare.net/IgorShkulipa 20
Конструкция into
Конструкция into подобна использованию конструкции let в том, что она
определяет локальную переменную внутри запроса.
Использование конструкции into сообщает компилятору о присвоении
результата конструкций group или join в локальную переменную,
которая будет использоваться позднее в следующей части запроса.
Конструкцию into еще называют конструкцией продолжения,
поскольку конструкции group и into не являются окончанием запроса.
Конструкцию into так же работает как генератор, подобно конструкции
from и идентификатор, предоставленный into во многом подобен
переменной диапазона from.
21. http://www.slideshare.net/IgorShkulipa 21
Пример into
var intoQuery = from number in Enumerable.Range(0, 50)
group number by number % 2 into groups
select new
{
Key = groups.Key,
Count = groups.Count(),
Numbers = groups
};
foreach (var item in intoQuery)
{
Console.WriteLine("nmod2={0}", item.Key);
Console.WriteLine("Count={0}", item.Count);
foreach (var number in item.Numbers)
{
Console.Write("{0}, ", number);
}
}
var intoQuery = from number in Enumerable.Range(0, 50)
group number by number % 2 into groups
where groups.Key == 0
select new
{
Key = groups.Key,
Count = groups.Count(),
Numbers = groups
};
mod2=0
Count=25
0, 2, 4, 6, 8, 10, 12,
14, 16, 18, 20, 22, 24,
26, 28, 30, 32, 34, 36,
38, 40, 42, 44, 46, 48,
mod2=0
Count=25
0, 2, 4, 6, 8, 10, 12,
14, 16, 18, 20, 22, 24,
26, 28, 30, 32, 34, 36,
38, 40, 42, 44, 46, 48,
mod2=1
Count=25
1, 3, 5, 7, 9, 11, 13,
15, 17, 19, 21, 23, 25,
27, 29, 31, 33, 35, 37,
39, 41, 43, 45, 47, 49,
22. http://www.slideshare.net/IgorShkulipa 22
Пример LINQ запроса
Dictionary<string, List<string>> dictionary =
new Dictionary<string, List<string>>
{
{"привет",
new List<string>{"пирвет", "првиет", "првет"}},
{"пока",
new List<string>{"поак", "пка"}},
{"дела",
new List<string>{"деал", "дила", "дла", "дкла"}},
{"хорошо",
new List<string>{"хрошо", "хоршо", "хроошо"}},
{"удачи",
new List<string>{"удкчи", "уадчи", "удачм"}}
};
string wrongText =
"n- пирвет! как деал?n" +
"- првиет! дила хоршо.n" +
"- хрошо, удачм.n" +
"- поак.n";
23. http://www.slideshare.net/IgorShkulipa 23
Пример LINQ запроса
string[] words =
wrongText.Split(new char[] { ' ', '!', '.', ',', '?', '-' });
var correctDict = from dict in dictionary
let wrongWords = dict.Value
from val in wrongWords
join word in words on val equals word
select new
{
WrongWord = word,
CorrectWord = dict.Key
};
string correctText = wrongText;
foreach (var item in correctDict)
{
correctText =
correctText.Replace(item.WrongWord, item.CorrectWord);
}
Console.WriteLine("Wrong Text: {0}", wrongText);
Console.WriteLine("Correct Text: {0}", correctText);
Wrong Text:
- пирвет! как деал?
- првиет! дила хоршо.
- хрошо, удачм.
- поак.
Correct Text:
- привет! как дела?
- привет! дела хорошо.
- хорошо, удачи.
- пока.
24. http://www.slideshare.net/IgorShkulipa 24
LINQ to Objects
Термином "LINQ to Objects" называют использование запросов LINQ
непосредственно с коллекциями IEnumerable или IEnumerable<T> без
промежуточных поставщиков LINQ или API-интерфейсов, таких как LINQ to SQL
или LINQ to XML. LINQ можно использовать для запроса любых перечислимых
коллекций, таких как List<T>, Array или Dictionary<TKey, TValue>.
По сути, LINQ to Objects представляет новый подход к коллекциям. Раньше нужно
было писать сложные циклы foreach, которые определяли способ извлечения
данных из коллекции. При применении подхода LINQ создается декларативный
код с описанием необходимых извлекаемых данных.
Кроме того, запросы LINQ имеют три основных преимущества перед традиционными
циклами foreach.
• Они более компактные и удобочитаемые, особенно при фильтрации по
нескольким условиям.
• Они предоставляют мощные возможности фильтрации, упорядочивания и
группировки с минимальным объемом кода приложения.
• Они могут быть перенесены на другие источники данных с минимальными
изменениями или без изменений.
В общем случае, чем более сложные операции следует выполнить над данными, тем
больше преимуществ от применения LINQ вместо использования традиционных
методов итераций.
Ссылка на раздел MSDN
25. http://www.slideshare.net/IgorShkulipa 25
LINQ to Entities
LINQ to Entities обеспечивает поддержку LINQ при запросах к
сущностям.
Компонент позволяет разработчикам писать запросы к концептуальной
модели Entity Framework на языке Visual Basic или Visual C#.
Запросы к платформе Entity Framework представляются в виде дерева
команд запроса, выполняемого на контексте объектов.
Технология LINQ to Entities преобразует запросы LINQ в запросы в виде
дерева команд, выполняет эти запросы на платформе Entity Framework
и возвращает объекты, которые могут использоваться как платформой
Entity Framework, так и технологией LINQ.
Ссылка на раздел MSDN
26. http://www.slideshare.net/IgorShkulipa 26
LINQ to DataSet
LINQ to DataSet упрощает и ускоряет выполнение запросов к данным,
кэшированным в объекте DataSet. В особенности LINQ to DataSet
упрощает создание запросов, позволяя писать их непосредственно на
языке программирования, а не применять отдельный язык запросов.
Использование метода Select для выборки всех строк из таблицы Product
и отображения названий продуктов.
// Fill the DataSet.
DataSet ds = new DataSet();
ds.Locale = CultureInfo.InvariantCulture;
FillDataSet(ds);
DataTable products = ds.Tables["Product"];
IEnumerable<DataRow> query =
from product in products.AsEnumerable()
select product;
Console.WriteLine("Product Names:");
foreach (DataRow p in query)
{
Console.WriteLine(p.Field<string>("Name"));
}
Ссылка на раздел MSDN
27. http://www.slideshare.net/IgorShkulipa 27
LINQ to XML
LINQ to XML обеспечивает интерфейс программирования для работы с
XML в памяти на основе платформы .NET LINQ Framework. LINQ to XML
использует новейшие возможности языка платформы .NET Framework
и может быть сравним с обновленным, переработанным программным
интерфейсом XML модели DOM.
Пример: как найти элемент с определенным атрибутом.
XElement root = XElement.Load("PurchaseOrder.xml");
IEnumerable<XElement> address =
from el in root.Elements("Address")
where (string)el.Attribute("Type") == "Billing"
select el;
foreach (XElement el in address)
Console.WriteLine(el);
Ссылка на раздел MSDN
28. http://www.slideshare.net/IgorShkulipa 28
LINQ to SQL
LINQ to SQL является компонентом .NET Framework, предоставляющим
инфраструктуру времени выполнения для управления реляционными
данными как объектами.
В LINQ to SQL модель данных реляционной базы данных сопоставляется
объектной модели, выраженной в языке программирования
разработчика. При запуске приложения LINQ to SQL преобразует
запросы LINQ из объектной модели в SQL и отправляет их в базу
данных для выполнения. Когда база данных возвращает результаты,
LINQ to SQL преобразует их обратно в объекты, с которыми можно
работать на собственном языке программирования.
Ссылка на раздел MSDN
29. http://www.slideshare.net/IgorShkulipa 29
Лабораторная работа №13. LINQ
В индивидуальном курсовом проекте, реализовать доступ к данным с
помощью LINQ:
• если используется база данных – LINQ to SQL
• если используется XML – LINQ to XML
• для итерации по коллекциям, по возможности использовать LINQ
to Objects