|
Как обойти преобразование параметров внутри выражений к 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&msg=37920968&tid=1350264]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
157ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 258ms |
0 / 0 |