|
|
|
Как обойти преобразование параметров внутри выражений к int?
|
|||
|---|---|---|---|
|
#18+
Столкнулся с интересной проблемой, .net все типы в выражениях ниже int приводит к int, что очень мешает в некоторых случаях, а именно: (Использую BL Toolkit для обращения к sql через linq, но на сколько я понял, это проблема не самой ORM, а именно linq запросов, т.к. конвертация к int закладывается в самом дереве выражений) таблица: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Код: sql 1. 2. 3. 4. код linq запроса: Код: c# 1. 2. 3. 4. 5. 6. 7. приводит к генерации sql запроса: Код: sql 1. 2. 3. 4. он приводит поле в таблице к Int Convert(Int, [j].[send_status]) = 1 несмотря на то, что enum имеет тип byte (enum SendStatusEnum : byte) (при простых выборках происходит тоже самое (без update), все передаваемые параметры ниже int, подтягиваются к int) как можно обойти такое поведение? иначе это может сильно мешать использованию индексов в БД + лишние расходы на конвертацию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2012, 15:05 |
|
||
|
Как обойти преобразование параметров внутри выражений к int?
|
|||
|---|---|---|---|
|
#18+
igr-z , Дык, нет в БД данных типа byte. Чем обусловлено Код: c# 1. Что не сделать по-умолчанию Код: c# 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2012, 15:30 |
|
||
|
Как обойти преобразование параметров внутри выражений к int?
|
|||
|---|---|---|---|
|
#18+
Оказалось, проблема существует только с типом byte (sbyte - дает тот же результат) аналог sbyte - tinyint, так же как у short - smallint, (но short не конвертируется) вот пример: Код: c# 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. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Дает следующее: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. конвертируется только byte (sbyte так же) Кто-нибудь с этим сталкивался? тип int для enum не подходит, таблица рассчитывается на миллиард записей, полей таких много, цена преобразования одного поля из 1 байта в 4 байта (int) будет составлять 3 Гб места на диске (только одного поля!), потому крайне важно использование индексов, которое при конвертировании полей на ходу не будет срабатывать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2012, 12:31 |
|
||
|
|

start [/forum/topic.php?fid=17&tid=1350264]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
149ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 12ms |
| total: | 246ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...