예제 #1
0
        private void JournalForm_Load(object sender, EventArgs e)
        {
            //Создание объекта контекста
            barberShop = new BarberShop(
                System.Configuration.ConfigurationManager
                .ConnectionStrings["DB"].ConnectionString
                );

            showJournal();
            InitRecord();
        }
예제 #2
0
        private void JournalForm_Load2(object sender, EventArgs e) //Набор упражнений - не активно
        {
            //ORM 3 - instance of context (создаем)
            barberShop = new BarberShop(
                System.Configuration.ConfigurationManager
                .ConnectionStrings["DB"].ConnectionString
                );

            //var query4 = from c in barberShop.Clients
            //             join g in barberShop.Genders on c.GenderId equals g.Id
            //             select new {Name = c.Name, Phone = c.Phone, Email = c.Email, Gender = g.Name};

            //var query = from client in barberShop.Clients
            //            select client;
            //var query2 = from gender in barberShop.Genders
            //             select gender;
            //var query3 = from barber in barberShop.Barbers
            //             select barber;
            //string str = "Genders - " + query2.Count() + "\n" +
            //             "Clients - " + query.Count() + "\n" +
            //             "Barbers - " + query3.Count() + "\n";
            //string str2 = str + "\n";
            //foreach (var item in query4)
            //{
            //    str2 += item.Name + " " + item.Phone +  " " + item.Email + " " + item.Gender + "\n";
            //}
            //MessageBox.Show(str, "Count", MessageBoxButtons.OK, MessageBoxIcon.Information);
            //MessageBox.Show(str2, "MESSAGE", MessageBoxButtons.OK, MessageBoxIcon.Information);

            //Получение результата запроса ввиде коллекции (массива/словаря)
            //var query4 = from c in barberShop.Clients
            //             where c.Id < 10
            //             select c;
            //var list = query4.ToList();
            //MessageBox.Show(list.Count.ToString());

            var query5 = from c in barberShop.Clients
                         join g in barberShop.Genders on c.GenderId equals g.Id
                         where c.Id < 10 && g.Id < 100
                         orderby c.Name descending
                         //select new { Name = c.Name, Gender = g.Name }; //Анонимные классы
                         select new Mixed()
            {
                Name = c.Name, Gender = g.Name
            };                                                                  //Именнованные классы
            StringBuilder sb = new StringBuilder();

            foreach (var obj in query5)
            {
                sb.Append(obj.Name);
                sb.Append(' ');
                sb.Append(obj.Gender);
                sb.Append('\n');
            }
            //MessageBox.Show(sb.ToString());

            //Текучий (Fluent) интерфейс / Method-based linq
            //-подход организации ООП при котором методы объектов возвращают
            //указатель на "себя" - на измененный объект
            //Подход противопоставляется возврату новых объектов в которые внесены изменения:
            //str = str.Replace(a,b) <-> str.Replace(a,b)
            //Наиболее популярное применение - для объктов с множественнными настройками
            //cell = new Cell.setValue(10).setColor(blue).setBorder(..)

            var query6 = barberShop.Clients.Where(c => c.Id < 10).Where(r => r.Name.Length < 25);
            var list   = query6.ToList();

            //MessageBox.Show(list.Count.ToString());

            sb.Clear();
            foreach (var item in barberShop.Clients)
            {
                sb.Append(item.Name + " ");
                try
                {
                    sb.Append(barberShop.Genders.Where(g => g.Id == item.GenderId).First().Name);
                }
                catch
                {
                    sb.Append('-');
                }

                //sb.Append(barberShop.Genders.Where(g => g.Id == item.GenderId).FirstOrDefault()?.Name ?? "-"); //без исключений

                sb.Append('\n');
            }
            //MessageBox.Show(sb.ToString());

            //Найти клиентов без указанного гендера
            var q = from c in barberShop.Clients
                    join g in barberShop.Genders on c.GenderId equals g.Id into temp
                    from t in temp.DefaultIfEmpty()
                    where t == null
                    select new Mixed()
            {
                Name = c.Name, Gender = t.Name
            };

            sb.Clear();
            foreach (var item in q)
            {
                sb.Append(item.Name + " ");
                sb.Append("--" + "\n");
            }
            //MessageBox.Show(sb.ToString());

            //Найти клиентов с гендером и ФИО, длиннее 25 символов
            sb.Clear();

            var res = barberShop.Clients
                      .Where(c => c.Name.Length > 25)
                      .Where(c => c.GenderId != null)
                      .Select(c => c.Name).ToList();

            foreach (var item in res)
            {
                sb.Append(item);
                sb.Append("\n");
            }

            //MessageBox.Show(sb.ToString());

            //Написать Method-based запрос на объединение таблиц Клиент и Гендер
            sb.Clear();

            var result = barberShop.Clients.GroupJoin(barberShop.Genders,
                                                      c => c.GenderId,
                                                      g => g.Id,
                                                      (x, y) => new { x, y }
                                                      ).SelectMany
                         (
                z => z.y.DefaultIfEmpty(),
                (z, g) => new { Name = z.x.Name, Gender = g.Name }
                         );

            foreach (var item in result)
            {
                //sb.Append(item);
                sb.Append(item.Name + " ");
                sb.Append(item.Gender);
                sb.Append("\n");
            }
            //MessageBox.Show(sb.ToString());
        }