Задать вопрос
ProKiLL
@ProKiLL
Системный администратор

Как автоматически выбрать тип данных?

Добрый день!
Есть некая функция:
public List<List<string>> DateToLis(string date)
        {
            DataTable dt = Get("SELECT service.FullName,asuiogv.fl_req_peper + asuiogv.fl_req_other,asuiogv.fl_req_epgu,asuiogv.fl_req_email,asuiogv.fl_req_ved,asuiogv.fl_z_peper + asuiogv.fl_z_other,asuiogv.fl_z_epgu,asuiogv.fl_z_email,asuiogv.fl_z_ved,asuiogv.ul_req_peper + asuiogv.ul_req_other,asuiogv.ul_req_epgu,asuiogv.ul_req_email,asuiogv.ul_req_ved,asuiogv.ul_z_peper + asuiogv.ul_z_other,asuiogv.ul_z_epgu,asuiogv.ul_z_email,asuiogv.ul_z_ved FROM asuiogv INNER JOIN service ON service.id = asuiogv.id_service where period='" + date + "';");
            
            List<List<string>> data = new List<List<string>>(); 
            for (int i = 0; i < dt.Rows.Count-1; i++)
            {
                List<string> list = new List<string>();
                for (int j = 0; j < dt.Columns.Count-1; j++)
                {
                    list.Add(dt.Rows[i].Field<string>(dt.Columns[j].Caption));//здесь необходимо за место string автоматически подбирать тип данных в зависимости от БД
                }
                data.Add(list);
            }
            return data;
        }


необходимо зделать так что бы в строке
list.Add(dt.Rows[i].Field<string>(dt.Columns[j].Caption));
string менялось в зависимости от данных таблицы, т.е. Int64, int или string.

Думал в сторону
TypeCode tc=Type.GetTypeCode(dt.Columns[dt.Columns[j].Caption)].DataType);
но при подстановке вместо string выдает ошибку.

Какое решение можно найти в данном случаи?
  • Вопрос задан
  • 215 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 4
@dmitryKovalskiy
программист средней руки
Хочется конечно немного матом сказать, но соберусь с силами пожалуй. Сколько у вас полей в выдаче? 10? Если бы их было 500, то ваша проблема была бы понятна, однако все решается проще. У вас должен быть класс сущности, объект которой создается на основе полученных данных.
Соберитесь с силами и напишите prop1 = col1, prop2 = col2 и т.д. Каждое отдельное поле имеет свой тип и если у вас там нет сюрпризов - все нормально сойдется.
List<List<string>> это не тип - это хрень. Данных о сущности никаких.
Ответ написан
Комментировать
Nipheris
@Nipheris Куратор тега C#
Воспользоваться благом C# "все есть объект":
1) заменить List<List<string>> на List<List<object>>;
2) dt.Rows[i].Field<string>(dt.Columns[j].Caption) заменить на dt.Rows[i][dt.Columns[j]];

3) объяснить назначение всего данного кода, ибо он напоминает переливание из пустого в порожнее, и List<List<object>> это бомба по определению.
Ответ написан
Комментировать
@JuniorNoobie
Сижу в поддержке, пишу мелкие проекты
Используйте LINQ и будет вам счастье.
Ответ написан
Комментировать
@Sing303
Дмитрий Ковальский дело говорит, у вас как минимум на каждую таблицу должна быть сущность и на каждый запрос который вы выполняете тоже должна быть сущность. Посмотрите как происходит работа с NHibernate и EF и таких вопросов не будет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы