Как стать автором
Обновить

Основы 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-уровневой архитектуре
Теги:
Хабы:
Всего голосов 5: ↑5 и ↓0 +5
Просмотры 1.8K
Комментарии Комментарии 29