Основы Linq. Linq и n-уровневая архитектура

    Майкрософот предоставило новое легкое в освоении и очень мощное и гибко расширение языков .NET для обработки данных под названием Linq.

    Как в многоуровневых приложениях спроектировать провайдер данных так, что бы получить набор объектов?

    К примеру , есть таблица tbCustomers ((Int64)CustID, (String)Name, (int32)Age) и есть класс Customers:

    publicclass Customers
    {
        private Int64 _CustID;
        public Int64 CustID
        {
            get { return _CustID; }
            set { _CustID = value; }
        }

        private string _Name;
        public string Name
        {
            get { return _Name; }
            set { _Name = value; }
        }

        //Тип Int32 допускающее значение null
        private Int32? _Age;
        public Int32?Age
        {
            get { return _Age; }
            set { _Age = value; }
        }

        //Инициализаторы
        public Customers()
        {
        }
       
        public Customers(Int64 CustID, string Name, Int32? Age)
        {
            _CustID = CustID;
            _Name = Name;
            _Age = Age;
        }

        //Получение набора объектов из поставщика данных
        publicstatic List<Customers> GetCustomers()
        {
            return CustomersData.GetAllCustomers();
        }
    }

    и необходимо получить из поставщика набор объектов Customers.

    Стандартное решение этого вопроса в .NET2.0 является использование пространства имен System.Data.SqlClient:

    publicstatic class CustomersData
    {
        //ИспользованиеSqlClient
        public static List<Customers> GetAllCustomers()
        {
            List<Customers> lst = new List<Customers>();
            using (SqlConnection conn = new SqlConnection(«Data Source=…»))
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand(«SELECT CustID, Name, Age FROM tbCustomers», conn);
                SqlDataReader reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    lst.Add(new Customers((Int64)reader[«CustID»], (String)reader[«Name»], (Int32)?reader[«Age»]));
                }
            }
            return lst;
        }
    }

    При использовании Linqмы можем получить набор данных из анонимных типов используя инициализатор объекта, т.е.

    publicstatic class CustomersData
    {
        //ИспользованиеLinq
        public static List<Customers> GetAllCustomers()
        {
            LinqDcDataContext db=new LinqDcDataContext();
            IEnumerable<Customers> result = db.tbCustomers.Select(c => new Customers(c.CustID, c.Name, c.Age));
            //ПриводимнаборIEnumerable<Customers> кList<Customers>
            return new List<Customers>(result);
        }
    }




    Оригинал статьи Linq в n-уровневой архитектуре

    Средняя зарплата в IT

    110 000 ₽/мес.
    Средняя зарплата по всем IT-специализациям на основании 8 605 анкет, за 2-ое пол. 2020 года Узнать свою зарплату
    Реклама
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее

    Комментарии 29

      0
      а) кат
      б) отформатируйте код
        0
        Просто это мой первый пост - еще не все знаю.
        Я бы с огромным удовольствием отформатировал бы эту статью как в своем персональном блоге - только у меня не получилось - а вообще - сейчас разберусь и все исправлю как надо. Спасибо за коммент.
          0
          К сожалению я тут пока не разобрался в форматировании кода - Пока что урезал статью и выложил продолженее - буду разбиртся как тут форматировать код.
            +1
            кат - <habracut>
            По ссылкам тут ходить не любят в таком виде.
              0
              Если что прошу не кидатся тапками что значит "кат" ?.
              Я и сам не люблю когда вот так вот ссылкой идет статься. Но пока вот сижу разбираюсь - почему теги форматирования здесь не пашут?. Обязательно разберусь и эту статью и будущие статьи буду писать в отформатированном виде.
                0
                оЧеПяток много стало - пора спать...
                  0
                  Кат - тег, заменяющий весь текст, идущий после себя ссылкой "читать далее".
                    0
                    Спасибо за подсказку - передалал - надеюсь сейчас правильно? Есть тут где почиать про оформление что бы не доставать всех?
          0
          Вообщем я хотел отформатировать код как у себя на сайте: http://www.akhmed.ru - но таки не смог установить здесь цвета :(((.
          У кого есть опыт форматирования? Как лучше здесь выкладывать исходники?
          0
          моя закинула в мемориз. буду в качестве стартового пособия спрошающим раздавать :)))
          искренне надеюсь что с форматированием у вас всё получится и вы перенесете топик сюда :)
            0
            Спасибо, постараюсь все таки приколоться с форматированием здесь - хочется оформить как у себя - пока что здесь ну никак не получается цвета привязать.
              +1
              Цвета здесь нельзя менять (всё стилевое оформление срезается при отправке сообщений). Можно использовать <b></b>, <i></i>, <u></u> - ну и сочетания. То есть можно только что-нибудь подобное изобразить:

              #include <stdio.h>

              int fact (int n) {
                if (n == 0)
                  return 1;
                return fact (n - 1) * n;
              }
                0
                да ну?!
                по идее "да ну" должно быть красным. если это не так, то прошу прощения :)
                  0
                  Во! Супер! Как это сделать??? У меня просто тоже все цветовое оформление беспощадно срезает! ((
                    +1
                    Oops. Слона-то я и не приметил. Да, с помощью нестандартных тегов всё работает - жалко что нормальым способом (через стили) ничего сделать нельзя...
                      0
                      Вот именно :((((((. У меня и так выспатся порой времени не хватает - а тут не хочется кучу времени в переоформление тратить совсем не хочется - вот думаю - написать утилитку для конвертирования специально для хабра или все таки продолжать писать заголовки - а полную версию у себя?
                      Пока что на первое время остается пользоватся вторым вариантом :(
                        0
                        По ссылкам (и на хабре и в других местах) ходит мизерное количество народу. Утилитка вроде как несложная должна быть ?
                          0
                          Ага - вот я думаю - по идеее должна быть несложная - я думаю с помощью несложного регулярного выражения можно находить все вхождения атрибута stlye - найти там значение color и потом уже найти родительский тег совсем несложно будет и добавить родительский тег font - совсем элементарно...
                          Вообщем если не ошибаюсь за полчаса-час максимум времени можно накотать утилитку. (я смотрю спал 3 часа вот как сон досмотрю - сразу же займусь этим )))
                  +1
                  может кармой не удался?!
                  по идее <font color="...">> должно работать...
                  если отсюда теги не пашут, то надо ждать пока карма вырастет (свои пару капель уже на кустик кармы брызнул).
                    0
                    Во - спасибо! Буду работать над статьей )
                0
                Уррррррааа!!!!! Написал таки утилитку - что бы преобразовать из атрибута style в тег FONT. Вот теперь получилось как и в оригинальной статье на akhmed.ru )). Сейчас чайку попью и выложу утилитку для всех жилающих )
                  0
                  Не выложил еще?
                  Будет очень полезна и мне..
                    0
                    да я давно выложил его. еще в прошлом году :). http://akhmed.ru/post/2007/10/HTMLChange…
                      0
                      только для работы используется SilverLight библиотеки - так что если что, необходимо будет поставить этот плагин... (попросит установить, если он не установлен)
                        0
                        Зашел на http://htmlchangeonhabra.akhmed.ru/
                        Жму кнопку "Преобразовать" и ничего не происходит...
                    0
                    Неплохо. Но примеров с LINQ маловато, не показана вся мощь :)
                    Ведь он же теперь не только часть языка, для него теперь работает интелисенс и не нужно обрамлять запросы в кавычки.
                      0
                      Полностью согласен! Просто примеров зпросов Linq везде сейчас отображено - а я не хотел заниматся дублированием чужих статей ).
                      Если интересно - я с удовольствием выложу несколько примеров для демонстрации возможностей Linq. Особенно мне нравится что linq можно применять для XML - это дает возможность легко и просто организовать хранилище данных в XML файлах. я за день освоил XLinq и переписал приложение (правдапростенькое - всего 3 таблицы) что бы перейти с SQL Express на XML файлы
                      0
                      Если кто нибудь это ещё читает или будет читать:
                      Интересный блог Scott Guthrie http://weblogs.asp.net/scottgu/
                      Также не всё пока в LINQ гладко по крайней мере на момент VS 2008 Beta2 - присоеденить к контексту оторванную запись без повторного считывания не представляется возможным (без изменения базы данных и добавления таймстампов).
                        0
                        Привет!

                        Не хочешь опубликовать это пост в новом блоге .NET?
                        http://habrahabr.ru/blog/net/

                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                        Самое читаемое