Re[96]: Тормознутость и кривость linq
От: alex_public  
Дата: 02.05.16 21:26
Оценка:
Здравствуйте, IT, Вы писали:

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

IT>Наметапрограммировать и в C# можно чего угодно. Особенно в pre-compile time.

Если ты имеешь в виду всяческие внешние препроцессоры, то конечно. Только вот это уже будет не C#. Я подобные решения тоже видел (например вот http://www.codesynthesis.com/products/odb/ довольно мощное и популярное), но лично мне они не особо нравятся по целому ряду причин.

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


Ну покажи пример какого-нибудь выражения, которое на твой взгляд хорошо выглядит в linq и будет ужасно выглядеть с помощью такой библиотечки. ) Сравним так сказать в непосредственной близости. )

_>>Ээээ что? )

IT>Ты в курсе как работает сравнение в SQL, если один из операндов NULL? Правильно, ты получишь false даже если оба операнда равны NULL. Т.е. чтобы корректно реализовать сравнение нужно его писать не как
IT>Field1 = @p
IT>А в зависимости от значение @p либо
IT>Field1 = @p
IT>либо
IT>Field1 IS NULL
IT>В результате народ не парится и пишет
IT>Field1 IS NULL AND @p IS NULL OR Field1 = @p
IT>Частенько план запроса в таких случаях убивается.

Я в курсе. ) Более того, данный вопрос уже подробно обсуждался прямо в этой темке чуть выше. ) И уже был ответ на это, что это довольно странная теория, т.к. при работе скажем на голых строках в том же C# короче записать просто q+=p?"Field1=@p":"Field1 IS NULL"; вместо указанного ужастика. Но опять же это всё не касается случая C++ и той библиотечки, т.к. там вопрос с null просто не стоит. )))
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.