Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






LinqToSQL и Linq.






Создадим проект LessonProject.Model для работы с БД типа ClassLibrary.

Добавляем LINQ to SQL Classes тип, называем LessonProejctDb.dbml


 

Открываем объект, выделяем все таблицы и мышкой переносим на холст:

Собственно, с помощью таких простых действий мы получаем:

· классы, готовые к использованию в работе с БД

· визуальное отображение таблиц и связей

Добавим несколько данных в таблицу Role и User:

  admin Админ
  customer Пользователь

 

  chernikov@gmail.com   1/1/2012 12: 00: 00 AM NULL   NULL NULL
  chernikov2@gmail.com   1/1/2012 12: 00: 00 AM NULL   NULL NULL

 

И UserRole

ID UserID RoleID
     
     
     

 

Создадим консольный проект 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 {
ID = p.ID, Kod = p.Code}) – получаем динамический тип, сформированный на основе Role.

.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






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.