Re[88]: Тормознутость и кривость linq
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 27.04.16 17:52
Оценка:
Здравствуйте, ·, Вы писали:

·>Плохо, что неочевидно. Показывает, что не сталкивался со сложными запросами, поэтому и считаешь что их реально генерить в compile time.

·>псевдокод такой примерно:
·>
·>List<Product> getProducts(String categoryFilter)
·>{
·>   if(categoryFilter == null)
·>      return resultOfQuery(
·>        "SELECT * FROM Product");
·>   else
·>      return resultOfQuery(
·>        "SELECT * FROM Product p"+
·>            " INNER JOIN Category c ON(c.id=p.categoryId)"+
·>            " WHERE c.name LIKE '{categoryFilter}%'")
·>}
·>

·>а теперь представь себе что таких nullable-фильтров 10 штук. Получается 1024 варианта запросов.

Это шутка? Даже с этим ручным закатом солнца получается банально, в стиле
   base = "SELECT * FROM Product p"
   filter = []
   if categoryFilter is not None:
      base += " INNER JOIN Category c ON(c.id=p.categoryId)"
      filter.append("c.name LIKE '{categoryFilter}%'")
   ... остальные 9 вариантов, которые могут модифицировать отдельные компоненты ...
   ## финализируем текст
   request = base + (" WHERE " if filter else "") + " AND ".join(filter)


Сразу дисклеймер: нет, я не поддерживаю позицию alex_public, что это всё лучше делать так вручную — хотя бы потому, что я банально ленив (той ленью, которая достоинство программиста), и в первую очередь побежал бы за готовым средством. Но и рассказ про 1024 варианта, мягко говоря, неадекватен.
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.