Здравствуйте, alex_public, Вы писали:
G>>Теперь задача посложнее:
G>>G>>if(categoryFilter != null)
G>>{
G>> products = products.Where(p => p.Category.Name.StartsWith(categoryFilter));
G>>}
G>>
G>>Теперь от параметра не просто добавляется фильтр, а еще и делается джоин. Без параметров никаких джоинов нет.
G>>Сама коллекция product может содержать быть отфильтрована и другими предикатами до фильтра по имени категории.
G>>Как это сделать на склейке строк или твоей библиотеке?
G>>Как родишь код, подумай что таких параметров на каждый запрос будет десяток.
_>Мне не очевидно из данного кода что там за join, зачем он и вообще о чём речь. Или показывай подробнее про задачу, таблицы и т.п. или просто покажи какой генерируется итоговый sql.
Плохо, что неочевидно. Показывает, что не сталкивался со сложными запросами, поэтому и считаешь что их реально генерить в 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 варианта запросов.