Re[95]: Тормознутость и кривость linq
От: IT Россия linq2db.com
Дата: 02.05.16 20:04
Оценка:
Здравствуйте, alex_public, Вы писали:

IT>>Понятно. Такие решения мы тоже проходили в своё время и определили их в малопригодные для реальной жизни.

_>Ну не прямо такие естественно (т.к. C# не поддерживает парадигму метапрограммирования), а видимо построение и исполнение SQL AST в рантайме. А почему посчитали малопригодным?

Наметапрограммировать и в C# можно чего угодно. Особенно в pre-compile time. Что касается малопригодности, то такие решения, чтобы более менее полноценно решать проблемы строгой типизации превращаются в пазлы с триллиардами методов. Обилие вызовов методов в том числе даже для поддержки африфметических операций делает код абсолютно нечитаемым. Достаточно посмотреть на твои примеры — SQL читается легко, а набор методов ужос-ужос. Если на linq народ переходит практически безболезненно, то такие решения чаще всего отторгаются разработчиками из-за малопонятности и более сложной поддержкой чем даже SQL.

_>>>А как float (да и любой другой тип в C++) по твоему может быть null? )))

IT>>Действительно. Т.е. либо потом косяки отлавливать, либо упоротый монструозный код писать.
_>Ээээ что? )

Ты в курсе как работает сравнение в SQL, если один из операндов NULL? Правильно, ты получишь false даже если оба операнда равны NULL. Т.е. чтобы корректно реализовать сравнение нужно его писать не как

Field1 = @p

А в зависимости от значение @p либо

Field1 = @p

либо

Field1 IS NULL

В результате народ не парится и пишет

Field1 IS NULL AND @p IS NULL OR Field1 = @p

Частенько план запроса в таких случаях убивается.
Если нам не помогут, то мы тоже никого не пощадим.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.