Hi all. Виделось мне краем глаза, что в LINQ есть динамическое конструирование запросов в таком духе:
q = from u in user select u;
q = q.where(u => u.id == 1); // за синтаксис не поручусь, но идея такая
Вопросы:
0 (offtop): Мне смутно помнится из когда-то виденного примера, что тип для u внутри where() не был указан. Оно что, само находит? А если в запросе несколько таблиц с id, тогда ругнётся?
1. А умеет ли LINQ (или кто ещё) динамически добавлять произвольные выражения не только в where, но и в любые другие части запроса? Например, так:
e = if (...) expr(u => u.id) else expr(u => u.boss_id)
q = from u in user select(e)
2. Подзапросы оно наверняка поддерживает, а динамически внедрять один запрос в другой, по аналогии с п.1?
3. П.1, но с усложнением. Допустим, нам надо вывести список юзеров по фильтру. В фильтре есть опция "показать юзеров, отказавшихся от наших услуг и оставивших отзыв" . А эти отказы и отзывы лежат в отдельной таблице. (Реальный юз-кейс с одной из прошлых работ.) Динамическое подключение такого выражения в условие потребует, кроме прочего, добавления в генерируемый SQL-запрос left join unsubscribed_user.