Перебрать данные из результатов запросов по классам

ferzmikk

Здравствуйте!Пусть приложение отправляет несколько SQL-запросов. И один из запросов возвращает такой результат как исходные данные:
ТТ
Будет два класса.Первый класс это Сценарий. Имеет такие свойства как ТТ, SKU, Дата поставки, и еще свойство Данные как массив Второго класса.
Экземпляр
Второй класс имеет такие свойства как Дата, Мера1, Мера2. В общем если разложить этот массив Данные, то выглядит следующим образом:Для экземпляра класса Сценарий(1)
Экземпляр
Для других экземпляров класса Сценарии() другие данные.Будет создаваться список ТТ+SKU+Дата поставки. Потом для каждого элемента списка создается класс и толкаются туда соответствующие данные из результатов запросов.Если я правильно понимаю, то сначала надо выгружать данные через объект SqlCommand и SqlReader, а потом затолкать в объект типа виртуальная таблица. И там перебором по классам раскидывать данные.Скажите как на C# правильно считывать данные с результатов запросов, чтобы потом быстро раскидывать данные по классам?
7 ответов

ferzmikk

не особо понял, что такое раскидывать по классам. Можно для класса сущности, сделать метод типа TryParse(IDataRecord) который будет считывать из записи IDataReader'а все нужные поля и загружать себя сам.Для простоты есть такие классы как DataSet'ы, там можно определить зависимости, можно сперва загрузить в DataSet'ы, а потом создавать объекты нужного класса из них.Есть способ еще проще, но медленнее, выгружаете данные в виде 1 XML файла, и залпом десериализуете и получаете сразу готовую модель данныхСмахивает это всё с виду на базу временных рядов или что это такое?


ferzmikk

не особо понял, что такое раскидывать по классам.
Если говорить проще, то предположим у нас есть первый экземпляр класса, где свойство ТТ имеет значение "ТТ1" и SKU имеет значение "SKU1". Нужно заполнить свойство-массив Данные(), а именно Мера1 и Мера2 по дням. Значит пробегаемся по строкам результата, и ищем строки с "ТТ1+SKU1+01.10.2017", "ТТ1+SKU1+02.10.2017", "ТТ1+SKU1+03.10.2017" и т. д. и по дням в экземпляре заполняем соответствующие значения Мера1 и Мера2.
Можно для класса сущности, сделать метод типа TryParse(IDataRecord) который будет считывать из записи IDataReader'а все нужные поля и загружать себя сам.
Как это загружать сам себя?
Для простоты есть такие классы как DataSet'ы, там можно определить зависимости, можно сперва загрузить в DataSet'ы, а потом создавать объекты нужного класса из них.
Можно ссылку, пример
Есть способ еще проще, но медленнее, выгружаете данные в виде 1 XML файла, и залпом десериализуете и получаете сразу готовую модель данных
Можно ссылку, пример
Смахивает это всё с виду на базу временных рядов или что это такое?
В исходнике данные по дням. И в итоге нужно построить отдельные таблицы, диаграммы, статистику по каждому экземпляру.


ferzmikk

в гугле забаннили?DataSet: https://msdn.microsoft.com/ru-ru/library/system.data.dataset(v=vs.110).aspxСериализация:https://msdn.microsoft.com/ru-ru/library/system.xml.serialization.xmlserializer(v=vs.110).aspx https://msdn.microsoft.com/ru-ru/library/tz8csy73(v=vs.110).aspxпо поводу генерации XML, зависит от того, какую СУБД вы используйте, если честно, я не в 1 не умею этого делать, потому как для этого у нас есть базисты, но думаю там всё довольно просто, погуглите


ferzmikk

Как это загружать сам себя?
в качестве параметров в конструторе типа или в методе фабрике должен быть аргумент типа IDataReader\IDataRecord, в этом методе\конструторе вы прочитаете поля и заполните свойства класса


ferzmikk

ferzmikk,У вас каша в голове, вы уйдите от данных и перейдите к сущностямЧто такое сценарий? что такое данные сценария?по поводу чтения данных есть куча ORM,но если ваш проект небольшой, то может быть уместно использовать типизированный DataSet


ferzmikk

ferzmikk,уйдите от данных и перейдите к сущностямЧто такое сценарий? что такое данные сценария?
Сценарий это класс, который обозначает, скажем так, Идентификацию TT+SKU. Данные сценария - это скажем так, для ТТ+SKU данные по отгрузкам и продажам по дням за определенный период. Это нужно для того, чтобы потом строить таблицу для каждого ТТ+SKU, диаграмму, смотреть статистику.


ferzmikk

ferzmikk,Зачем именно классы и ООП? На sql не хотите?