Следующий вызов linq в обычном linq to sql приводит к 1 запросу SQL к базе данных
Table1.Select(t => new {Table2.First().Property1})
Но я не могу, кажется, привести Dynamic Linq к тому же, ниже выдает 2 отдельных запроса.
Table1.Select("new(@0.Property1)", Table2.First())
Это тоже не работает
Table1.Select("@0", Table2.First().Property1)
или это
Table1.Select("new(@0 as MyField)", Table2.First().Property1)
Что мне не хватает?
Благодаря пониманию Джеффа правильное расположение запросов должно быть
Table1.Select(t => new {t2 = Table2.First()}).Select("new(t2.Property1)")
который производит один запрос запроса к БД
Он генерирует два отдельных запроса, потому что в этом контексте Table2.First()
является отдельным вызовом от остальной части запроса. Он не интегрирован в сгенерированное выражение. Это как если бы вы сделали это:
var first = Table2.First(); // evaluated eagerly due to the First() call
var query = Table1.Select("new(@0.Property1)", first);
Вы можете достичь желаемого результата, если переписать его в терминах декартовых произведений со второй таблицей.
var query = Table1.SelectMany(t1 =>
Table2.Take(1).Select(t2 => new { t1, t2 })
)
.Select("new(t2.Property1 as MyField)");