Подкиньте ключевых слов
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 07.09.09 05:39
Оценка:
Кроме простого маппинга объектов на фиксированные таблицы-поля пока из BLT ничего не использовал. Теперь нужно извлечь данные в такой ситуации:
1. имя вьюшки (View1, View2, View3 ...) становится известно перед извлечением данных
2. одна колонка — DateTime TIME_STAMP — всегда есть, а вторая может иметь разные имена и разный тип (int,float,bit)
Как правильнее использовать BLT для упрощения кодирования извлечения данных?
Re: Подкиньте ключевых слов
От: ili Россия  
Дата: 07.09.09 06:06
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

OE>Кроме простого маппинга объектов на фиксированные таблицы-поля пока из BLT ничего не использовал. Теперь нужно извлечь данные в такой ситуации:

OE>1. имя вьюшки (View1, View2, View3 ...) становится известно перед извлечением данных
OE>2. одна колонка — DateTime TIME_STAMP — всегда есть, а вторая может иметь разные имена и разный тип (int,float,bit)
OE>Как правильнее использовать BLT для упрощения кодирования извлечения данных?

1. см SqlQuery и его родителей. Это как вариант генерации запросов. Имя вьюшек можно попробовать шаманить через свой MetaDataProvider. Имя второй колонки сокорее всего тоже можно через генерацию подшаманить через AS.
2. Тип данных — не особо важен, если есть более обобщенный тип к которому можно привести все эти типы. Допустим тот же float — в него BLT из приведенных выше сконвертит.

В общем я бы сделал генератор запросов для таких вьюшек и итоговый тип который из нее выбирается. А если тип не нужен, то всегда можно выбирать и DataTable...

P.S. есть еще один шаманский способ, сделать маппинг ручками — для этого свой объект надо унаследовать от ISupportMapping, или повесить на геро фабрику объектов.
Re[2]: Подкиньте ключевых слов
От: ili Россия  
Дата: 07.09.09 06:51
Оценка:
Здравствуйте, ili, Вы писали:

ili> Имя второй колонки сокорее всего тоже можно через генерацию подшаманить через AS.


или еще можно сделать для объекта свой ObjectMapper, перегрузить в нем GetOrdinal(string name) и на все имена отличные от "DateTime" вертать ординал от "SecondField"
Re[3]: Подкиньте ключевых слов
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 08.09.09 04:20
Оценка:
Здравствуйте, ili, Вы писали:

ili>или еще можно сделать для объекта свой ObjectMapper, перегрузить в нем GetOrdinal(string name) и на все имена отличные от "DateTime" вертать ординал от "SecondField"


с SqlQuery вроде все просто решается, можно параметрами сформатировать, типа-
[SqlQuery(@"SELECT TIME_STAMP, {1} FROM {0} 
        WHERE TIME_STAMP >= @from AND TIME_STAMP <= @to
        ORDER BY TIME_STAMP")]
public abstract _______ GetDataHistory([Format(0)]string viewName, [Format(1)]string fieldName, DateTime from, DateTime to);

а вот насчет возвращаемого значения — нельзя ли получить IEnumerable<> объектов анонимного типа, сделанного на основе полей, перечисленных в запросе, как это например linq-овский Select делает?

(по исходникам я шарюсь, но может кто навскиду ткнет в нужное место)
Re[4]: Подкиньте ключевых слов
От: ili Россия  
Дата: 08.09.09 04:46
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

OE>а вот насчет возвращаемого значения — нельзя ли получить IEnumerable<> объектов анонимного типа, сделанного на основе полей, перечисленных в запросе, как это например linq-овский Select делает?


а как ты потом будешь обращаться к полям этих типов? да и:

Анонимный тип имеет область действия метода. Для передачи анонимного типа или коллекции анонимных типов за границы метода необходимо прежде всего привести тип к объекту. Однако это нарушает строгое определение анонимного типа. Если результаты запроса нужно сохранить или передать за границы метода, попробуйте воспользоваться обычной именованной структурой или классом вместо анонимного типа.


можно попробовать что-то типа IEnumerable<DataRow>... но я бы сварганил простой тип с обджек маппер к нему.. хотя, это к вопросу о том на сколько тебе важено сохранить оригинальный тип второго поля...
Re[5]: Подкиньте ключевых слов
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 08.09.09 05:44
Оценка:
Здравствуйте, ili, Вы писали:

OE>>а вот насчет возвращаемого значения — нельзя ли получить IEnumerable<> объектов анонимного типа, сделанного на основе полей, перечисленных в запросе, как это например linq-овский Select делает?

ili>а как ты потом будешь обращаться к полям этих типов?

по именам, через Reflection

ili>Анонимный тип имеет область действия метода


не особо критично, я могу вывести результат (на экран) прямо в этом методе и больше он мне не нужен

ili>на сколько тебе важено сохранить оригинальный тип второго поля...


оригинальный тип не важен, значения нужны только для вывода на экран, но я похоже не совсем точно описал начальные условия — "вторых" параметров может быть как один так и несколько
Re[6]: Подкиньте ключевых слов
От: ili Россия  
Дата: 08.09.09 06:04
Оценка: 32 (1)
Здравствуйте, Odi$$ey, Вы писали:

ili>>Анонимный тип имеет область действия метода

OE>не особо критично, я могу вывести результат (на экран) прямо в этом методе и больше он мне не нужен

на сколько я понимаю, в этом случае анонимный тип определился бы не в твоем методе, а в потрохах BLT, в то время как в Linq2Object он определяется в методе где и пользуется. может Linq провайдер и умеет такое делать, но без него вроде как тут фиг что сделаешь.

OE>оригинальный тип не важен, значения нужны только для вывода на экран, но я похоже не совсем точно описал начальные условия — "вторых" параметров может быть как один так и несколько


да верни ты DataTable\ IEnumerable<DataRow> в таком случае и не мучайся может еще можно что-то типа List<List<string>> — но такого я никогда не проверял
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.