Re[2]: Пространство имён Rsdn.Framework.Data
От: IT Россия linq2db.com
Дата: 10.10.03 00:57
Оценка: 11 (1)
Здравствуйте, Павел Бондарчук, Вы писали:

ПБ>Как вам такая идея?




Добавь в конец MapData.cs следующие методы:

        public static IList MapList(IDataReader reader, IList list, Type type)
        {
            if (reader.Read())
            {
                Mapping.DataReaderSource drs = new Mapping.DataReaderSource(reader);
                Mapping.TypeDescriptor   td  = Mapping.TypeDescriptor.GetDescriptor(type);

                do
                {
                    object o = td.CreateInstance();

                    MapData.Map(drs, reader, td, o);

                    list.Add(o);
                } while (reader.Read());
            }

            return list;
        }

        public static ArrayList MapList(IDataReader reader, Type type)
        {
            ArrayList arrayList = new ArrayList();

            MapList(reader, arrayList, type);

            return arrayList;
        }


Использовать можно будет так:

using System;
using System.Data;
using System.Collections;
 
using Rsdn.Framework.Data;
using Rsdn.Framework.Data.DataProvider;

namespace Example
{
    public class Category
    {
        [MapField(Name = "CategoryID")]
        public int    ID;

        public string CategoryName;

        [MapField(IsNullable = true)]
        public string Description;
    }

    class Test
    {
        static void Main()
        {
            using (DbManager   db = new DbManager())
            using (IDataReader dr = db.ExecuteReader(@"
                SELECT
                    CategoryID,
                    CategoryName,
                    Description
                FROM Categories

                SELECT
                    CategoryID,
                    CategoryName
                FROM Categories"))
            {
                ArrayList al = MapData.MapList(dr, typeof(Category));

                foreach (Category c in al)
                    Console.WriteLine("{0,2}  {1,-15} {2}", c.ID, c.CategoryName, c.Description);

                if (dr.NextResult())
                {
                    al = MapData.MapList(dr, typeof(Category));

                    foreach (Category c in al)
                        Console.WriteLine("{0,2}  {1,-15} {2}", c.ID, c.CategoryName, c.Description);
                }
            }
        }
    }
}


Я это попозже выложу в новой версии.
... << RSDN@Home 1.1 beta 2 >>
Если нам не помогут, то мы тоже никого не пощадим.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.