Си диез / Говнокод #3854 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
str_sql = " select convert(varchar(6),e.id) as  equipment_id,e.name as name,1 as is_check  " +
                          "         ,(select count(t2.id) from equipment t2 where t2.parent_id=e.id) count_child" +
                          " from equipment e " +
                          " where isnull(e.parent_id,0)=" + e.Node.Value +
                          "       and id in (select cod from f_DisplayEqipmentContract_nodes_2(" + str_contract + "))";

а вот так мы собираем sql запрос

Запостил: madnezz madnezz, (Updated )

Комментарии (31) RSS

  • Ну хорошо, а как мы должны собирать SQL запрос?
    С собачкой (@)? То же самое. (Ну, правда, str_sql получится в несколько строк).
    Ответить
    • Если для такого запроса хочется использовать LINQ to SQL -- то наверное стоит изучить азы SQL 🙂
      Ответить
      • а для строкового запроса азы значит не надо...
        Ответить
        • надо.

          просто желаение везде юзать linq2sql в 80% случаев связано с нежеланием аффтара изучать SQL, и со святой верой что linq2sql сгенерит самый лучший запрос.

          обычно это кончается тормозящими приложениями
          Ответить
          • любой инструмент в кривых руках на выходе даёт говно.
            Ответить
            • Вот я и попросил пример НЕ говна. Может быть Вы знаете хотя бы одно решение на linq2sql, которое было бы не говном, и которое Вы можете показать?
              Ответить
        • LINQ генерирует монструидальные запросы, создающие огромную нагрузку на сервер.
          Зато он позволяет оперировать более высокоуровневыми вещами, нежели сам SQL. И мапит результаты в объекты автоматически.

          В данном случае у нас есть запрос. Все, что нужно сделать, это переделать его на биндинг через ADO.NET (что бы избежать sql injection например) и заменить подзапросы на внутренние джойны.

          Позиция "с базой всегда работаем через linq2sql" кажется мне не верной. Слишком уж много я видел веб-приложений, ставящих сервера раком из за того, что один заход на сайт вызывает до тридцати запросов с поздзапросами.

          Linq2SQL плох еще тем, что провоцирует программиста не выделять этот код в DAO.
          Linq запросы кажутся программисту чем-то высокоуровневым, и потому их часто можно встретить в контроллере MVC.NET например.

          Это делает код нетестируемым.

          Кстати, а у Вас есть примеры хороших приложений, работающих на linq2sql?
          Ответить
          • Я программист asp.net, поэтому в проектах использую linq to sql, не вижу в этом ничего постыдного. Да, есть варианты, когда запросы становятся просто нереально долгими по времени, тогда они вручную переписываются на хранимки. К которым, кстати, тоже проще обращаться через linq.

            В простых случиях, запрос типа "var a = from u in da.Users order by u.name select a" будет что с linq, что без него выглядеть совершенно одинаково. Но создавать отдельную процедуру я не вижу смысла, как и писать открытый SQL-код в проекте.
            Ответить
            • Мне кажется, что в данном случае мы имеем вполне себе простой случай, нет?
              Тогда зачем усложнять его переделкой на linq, когда запрос уже готов?

              ситуация, когда часть запросов хранится ввиде linq, а другая часть ввиде хранимок -- ужасна.
              Ответить
              • Почему? Нет, я не издеваюсь, и не иронизирую. Хочу прочитать аргументированное мнение.
                Ответить
                • Почему плоха такая ситуация?

                  Попробую объяснить. В программировании есть такое понятие -- "cohesion". Смысл его в том, что определенного типа знания должны быть рядышком. Например если у Вас есть логика вычисления длины хвоста страуса -- то она должна быть в одном классе.
                  Если она тонко размазана по всему проекту, то это очень плохо. Во-первых ее тяжело протестировать. Во-вторых ее тяжело изменить.

                  Потому обычно шаблоны стараются держать в одном месте, логику -- в другом, доступ к БД -- в третьем.


                  В Вашем случае запросы частично лежат в хранимках, частично генерятся на лету, причем наверняка из разных мест (скажите честно -- у Вас есть интерфейс типа DAO?).

                  Это и кажется мне не очень красивым решениесм
                  Ответить
                  • так, а каково Ваше решение? что вы предлагаете взамен?
                    Ответить
                    • Сборка запросов и биндинг параметров. В этом случае программист имеет полный контроль над сгенеренными запросами.
                      Кроме того SQL код уж точно не выйдет за пределы DAO.

                      В идеальном варианте конечно хранимки на стороне бд, но это , увы, не всегда возможно.
                      Ответить
                      • ну, видимо это мое личное мнение. меня просто корежит от запросов в строках 🙂
                        Ответить
                        • Меня тоже, потому я стараюсь использовать хранимки.

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

                          Кстати, как бы Вы порешали это в linq?
                          Ответить
                          • Напрашивается мнение что Микрософт наспамил кучу технологий поддержку которых потом прекращает! Что выбирать бедному кодиру?
                            Ответить
                            • То, что удобно под конкретный случай. Если только из технологий M$:
                              1) TypedDataSet
                              2) Linq2SQL
                              3) Entity Framework
                              Ответить
          • К тому же, практически каждый серьезный запрос я просматриваю профайлером, и подзапросов не допускаю.
            Ответить
            • ))тоесть Вы сначала пишете на linq, потом смотрите что он нагенерил профайлером, и переписываете запросы так, что бы там не было мусора, верно?

              тогда начерта Вам linq?
              Ответить
              • это напоминает бессмысленный спор 🙂 я вижу в нем много преимуществ, linq позволяет быстро писать такие вещи. удобно. linq - не панацея, я не спорю. но очень облегчает разработку
                Ответить
                • Согласен. linq 2 sql замечательный инструмент (жаль, что создатели на него забили). Аргументы анонимуса какие-то высосанные из пальца и без примеров - хотелось бы увидеть пример монстроидального сгенереного запроса при небольшом linq запросе. про DAO - тоже глупость. linq-2-sql по-моему только облегчает реализацию, а не заменяет.
                  Ответить

Добавить комментарий

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8