![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
LinqToSQL и Linq.
Создадим проект LessonProject.Model для работы с БД типа ClassLibrary. Добавляем LINQ to SQL Classes тип, называем LessonProejctDb.dbml
Открываем объект, выделяем все таблицы и мышкой переносим на холст: Собственно, с помощью таких простых действий мы получаем: · классы, готовые к использованию в работе с БД · визуальное отображение таблиц и связей Добавим несколько данных в таблицу Role и User:
И UserRole
Создадим консольный проект Lesson3 и подключим LessonProject.Model. Добавим сборку System.Configuration и System.Data.Linq. Проинициализируем context и выведем данные о ролях: class Program { static void Main(string[] args) { var context = new LessonProjectDbDataContext(ConfigurationManager.ConnectionStrings[" ConnectionString" ].ConnectionString);
var roles = context.Roles.ToList(); foreach (var role in roles) { Console.WriteLine(" {0} {1} {2}", role.ID, role.Code, role.Name); } Console.ReadLine(); } }
Для добавления строки в Role делаем так: var newRole = new Role { Code = " manager", Name = " Менеджер" }; context.Roles.InsertOnSubmit(newRole); context.Roles.Context.SubmitChanges(); Для удаления строки в Role делаем так: var role = context.Roles.Where(p => p.Name == " Менеджер").FirstOrDefault(); if (role! = null) { context.Roles.DeleteOnSubmit(role); context.Roles.Context.SubmitChanges(); } Для изменения данных делаем так: var role = context.Roles.Where(p => p.Name == " Менеджер").FirstOrDefault(); if (role! = null) { role.Name = " Манагер"; context.Roles.Context.SubmitChanges(); } Для манипуляции данных используется язык запросов Linq. Мы рассмотрим только некоторые основные функции Linq. Linq применяется для типов реализующий интерфейс IQueryable< > .Where() – основная функция фильтрации. Возвращает тип IQueryable. Условие внутри должно возвращать булево значение (bool). var roles = context.Roles.Where(p => p.Name == " Менеджер") .FirstOrDefault() -.First(),.Single(),.SingleOrDefault() – получают первую или единственную запись. Если записи нет, то FirstOrDefault() или SingleOrDefault() возвращают null (на самом деле, значение по умолчанию этого типа [default(int)], например). var roles = context.Roles.Where(p => p.Name == " Менеджер").FirstOrDefault() – получаем первую (или не получаем) роль названную «Менеджер». .Take() – выбирает N первых записей var roles = context.Roles.Where(p => p.Name == " Менеджер").Take(4) – выберет 4 первые записи .Skip() – пропускает выбор N первых записей var roles = context.Roles.Where(p => p.Name == " Менеджер"). Skip(2).Take(3) – пропустит первые 2 и выберет 3 следующие записи .OrderBy() – сортирует по возрастанию. А также OrderByDescending(), ThenBy(), ThenByDescending(). Лямбда-выражение должно возвращать тип int, по которому и будет происходить сортировка. var roles = context.Roles.Where(p => p.Name == " Менеджер").OrderBy(p => p.ID) – сортирует по порядку .Count() – получает количество записей var rolesCount = context.Roles.Where(p => p.Name == " Менеджер").Count() – количество записей .Any() – существует одна или больше записей по данному условию var rolesExist = context.Roles.Where(p => p.Name == " Менеджер").Any() – есть ли запись такая . Select() – возвращает IQueryable произвольного типа, может быть даже dynamic: var otherRole = context.Roles.Where(p => p.Name == " Менеджер").Select(p => new { .SelectMany() – возвращает объединение всех IQueryable типов внутри выборки: var otherRole = context.Roles.Where(p => p.Name == " Менеджер").SelectMany(p => p.UserRoles) – получаем все UserRole из роли, названной «Менеджер» .Distinct() – удаляет дубликаты var managers = context.Roles.Where(p => p.Name == " Менеджер").SelectMany(p => p.UserRoles).Select(p => p.User).Distinct() – все пользователи с ролью названной «Менеджер» Примечание: First(), FirstOrDefault(), Single(), SingleOrDefault(), Any(), Count() – могут применять параметр, соответствующий Where(), тем самым, можно сокращать запись: var roles = context.Roles.FirstOrDefault(p => p.Name == " Менеджер")
Больше примеров и вариантов использования linq вы сможете найти: https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b
|