|
Linq и SqlDataReader
|
|||
---|---|---|---|
#18+
Здравствуйте всем, имеется SqlDataReader. Как можно с помощью Linq преобразовать его в массив классов, поля которого являются полями таблицы? Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2011, 12:34 |
|
Linq и SqlDataReader
|
|||
---|---|---|---|
#18+
artemiusЗдравствуйте всем, имеется SqlDataReader. Как можно с помощью Linq преобразовать его в массив классов, поля которого являются полями таблицы? Спасибо! Никак. Это разные идеологии чтения данных. Общее у них то, что и из SqlDataReader, и используя Linq можно заполнить List<класс> ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2011, 00:59 |
|
Linq и SqlDataReader
|
|||
---|---|---|---|
#18+
artemiusмассив классов, поля которого у классов нет полей ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2011, 09:37 |
|
Linq и SqlDataReader
|
|||
---|---|---|---|
#18+
Верблюду классов нет полей А что есть у классов? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2011, 16:25 |
|
Linq и SqlDataReader
|
|||
---|---|---|---|
#18+
МСУВерблюду классов нет полей А что есть у классов? свойства, методы. Если же ты хочешь выставить поля наружу - твое конечно дело, но как ты потом будешь их изменения отслеживать? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2011, 18:20 |
|
Linq и SqlDataReader
|
|||
---|---|---|---|
#18+
artemiusимеется SqlDataReader. Как можно с помощью Linq преобразовать его в массив классов, поля которого являются полями таблицы? Можно. Но причём тут LINQ? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2011, 18:23 |
|
Linq и SqlDataReader
|
|||
---|---|---|---|
#18+
Верблюдсвойства, методы. Если же ты хочешь выставить поля наружу - твое конечно дело, но как ты потом будешь их изменения отслеживать? А если я не хочу отслеживать их изменения? :-) Впрочем, если я потом это захочу - поменяю поля на свойства, всё перекомпилирую и всё. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2011, 18:25 |
|
Linq и SqlDataReader
|
|||
---|---|---|---|
#18+
Алексей Квсё перекомпилирую и всё. :-) Ога, ога. И все остальные пять тысяч проетов, которые ведет твоя компания тоже перекомпилирую... заодно будет чем программистам заняться - они же всеравно ничего не делают... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2011, 18:27 |
|
Linq и SqlDataReader
|
|||
---|---|---|---|
#18+
ВерблюдАлексей Квсё перекомпилирую и всё. :-) Ога, ога. И все остальные пять тысяч проетов, которые ведет твоя компания тоже перекомпилирую... заодно будет чем программистам заняться - они же всеравно ничего не делают...А я опишу класс как private или internal. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2011, 18:29 |
|
Linq и SqlDataReader
|
|||
---|---|---|---|
#18+
Опять же, если это DTO, передаваемый через WCF. В нём логики нет по определению. WCF без проблем распознаёт публичные поля. LINQ тоже. Накой тут свойства? ЗЫ: Писать просто { get; set; } лень. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2011, 18:36 |
|
Linq и SqlDataReader
|
|||
---|---|---|---|
#18+
Алексей КОпять же, если это DTO, передаваемый через WCF. В нём логики нет по определению. WCF без проблем распознаёт публичные поля. LINQ тоже. Накой тут свойства? ЗЫ: Писать просто { get; set; } лень. Ну ладно, пусть будет DTO. Но тут человек хочет, как я понял, датаридер на бизнес-объекты отразить... где Сева с его CSLA? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2011, 18:44 |
|
Linq и SqlDataReader
|
|||
---|---|---|---|
#18+
Верблюдгде Сева с его CSLA? Ну может пока BLToolkit-ный маппер предложим? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2011, 18:48 |
|
Linq и SqlDataReader
|
|||
---|---|---|---|
#18+
ВерблюдА что есть у классов? свойства, методы. Если же ты хочешь выставить поля наружу - твое конечно дело, но как ты потом будешь их изменения отслеживать? [/quot] Стоп стоп стоп. Верблюд, давеча Вы утверждали, что у классов нет полей. А теперь говорите обратное. Давайте определимся, у классов есть поля или нету? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2011, 19:46 |
|
Linq и SqlDataReader
|
|||
---|---|---|---|
#18+
По теме: 10281093 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2011, 19:49 |
|
Linq и SqlDataReader
|
|||
---|---|---|---|
#18+
МСУПо теме: 10281093 Reflection - не наш метод. Взрослые дядьки делают через Emit. Мутим EmitPropertyInfo с методами GetValue и SetValue и применяем везде. В том числе и для этой задачи. Могу завтра выложить если интересно. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2011, 19:58 |
|
Linq и SqlDataReader
|
|||
---|---|---|---|
#18+
Алексей КМСУПо теме: 10281093 Reflection - не наш метод. Взрослые дядьки делают через Emit. Мутим EmitPropertyInfo с методами GetValue и SetValue и применяем везде. В том числе и для этой задачи. Могу завтра выложить если интересно. Ок, интересно было бы глянуть. Заодно посостязаемся, чей маппер будет шустрее :) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2011, 20:41 |
|
Linq и SqlDataReader
|
|||
---|---|---|---|
#18+
Алексей КМСУПо теме: 10281093 Reflection - не наш метод. Взрослые дядьки делают через Emit. Мутим EmitPropertyInfo с методами GetValue и SetValue и применяем везде. В том числе и для этой задачи. Могу завтра выложить если интересно. Ок, интересно было бы глянуть. Заодно посостязаемся, чей маппер будет шустрее :) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2011, 20:48 |
|
Linq и SqlDataReader
|
|||
---|---|---|---|
#18+
МСУНу там маппера как такового нет. Там заготовка для него. А дальше используем эту заготовку как обычный рефлекшен везьде где нужно динамически обращаться к свойствам. Не для слабонервных Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210.
Ну и пример вызова: Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2011, 06:00 |
|
Linq и SqlDataReader
|
|||
---|---|---|---|
#18+
Алексей КНу и пример вызова: Код: plaintext 1. 2. 3. 4.
Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2011, 06:02 |
|
Linq и SqlDataReader
|
|||
---|---|---|---|
#18+
Алексей КА дальше используем эту заготовку как обычный рефлекшен везьде где нужно динамически обращаться к свойствам. Ну а в чём тогда "величие" по сравнению с родной и любимой всеми рефлекторикой? ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2011, 10:36 |
|
Linq и SqlDataReader
|
|||
---|---|---|---|
#18+
МСУАлексей КА дальше используем эту заготовку как обычный рефлекшен везьде где нужно динамически обращаться к свойствам. Ну а в чём тогда "величие" по сравнению с родной и любимой всеми рефлекторикой? ;)Я имел ввиду похожий API: PropertyInfo => EmitPropertyInfo. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2011, 10:39 |
|
Linq и SqlDataReader
|
|||
---|---|---|---|
#18+
Алексей КМСУПо теме: 10281093 Reflection - не наш метод. Взрослые дядьки делают через Emit. Код: plaintext
Код: plaintext
Код: plaintext
Код: plaintext 1. 2.
Код: plaintext
Браво, Алексей, браво! :) Алексей КНу а в чём тогда "величие" по сравнению с родной и любимой всеми рефлекторикой? ;)Я имел ввиду похожий API: PropertyInfo => EmitPropertyInfo.[/quot] См. выше :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2011, 10:43 |
|
Linq и SqlDataReader
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Дробовик доставать? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2011, 10:47 |
|
Linq и SqlDataReader
|
|||
---|---|---|---|
#18+
МСУДробовик доставать?Ничего не могу с собой поделать. Однажды наступил момент органического неприятия оператора логического отрицания "!" из-за его ненаглядности. Продолжаю с собой бороться, пока безрезультатно. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2011, 10:49 |
|
Linq и SqlDataReader
|
|||
---|---|---|---|
#18+
МСУСм. выше :)Как бэ речь идёт о том, чтобы избежать вызова PropertyInfo.GetValue и PropertyInfo.SetValue. То что приведено выше - вызывается однократно при первом обращении, кэшируется. Вы походу не в теме решаемой тут задачи. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2011, 10:53 |
|
Linq и SqlDataReader
|
|||
---|---|---|---|
#18+
Переписал свой маппер на Emit'овские GetProperty и SetValue. Тест проводился на миллионе записей в DataTable (ID, Value), намапливаемых в IEnumerable<T>. Замер времени брался только на маппинг (не на заполнение таблицы, разумеется). Итоги: Reflection vs EmitЗамер 1Замер 2Замер 3Замер 4Замер 5Среднее20162017204320311973 2016.0 48664844487748424835 4852.8 Emit в 2.4 раза быстрее отработал за счёт кеширования свойств. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2011, 12:43 |
|
Linq и SqlDataReader
|
|||
---|---|---|---|
#18+
МСУ Emit в 2.4 раза быстрее отработал за счёт кеширования свойств.За счёт кодогенерации записи в свойства вместо PropertyInfo.SetValue. Ну и сама кодогенерация, разумеется, кешируется. В случае с чтением из датаридера, возможно, это и не даст существенного выигрыша, по сравнению с временем выполнения запроса. Но и хуже не будет. :-) А в задачах клонирования объектов, мэппингов между объектами, или DataTable и объектом и т. п. это даёт выигрыш в десятки раз. А в задаче сортировки по свойству класса, указываемому динамически (тычок на заголовок грида), без эмита просто не обойтись. В WPF к счастью для этого есть родные механизмы, а вот в WinForms таких возможностей нет. Конечно, в WinForms можно отказаться от типизированных списков в пользу DataTable, но это не наш метод. :-) ЗЫ: Если я не ошибаюсь, вызов делегата происходит медленнее вызова обычного метода. Можно ещё ускорить, заменив генерацию делегата генерацией виртуального метода. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2011, 13:40 |
|
Linq и SqlDataReader
|
|||
---|---|---|---|
#18+
Алексей КА в задачах клонирования объектов, мэппингов между объектами, или DataTable и объектом и т. п. это даёт выигрыш в десятки раз. Леня, харэ фантазировать. Привел же замеры, в 2.4 раза на миллионе запией :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2011, 17:46 |
|
|
start [/forum/topic.php?all=1&fid=17&tid=1350607]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
53ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 165ms |
0 / 0 |