Я хочу выделить некоторые общие запросы по нескольким таблицам. В очень простом примере все таблицы имеют столбец DataDate
, поэтому у меня есть такие запросы:
let dtexp1 = query { for x in table1 do maxBy x.Datadate }
let dtexp2 = query { for x in table2 do maxBy x.Datadate }
Основываясь на предыдущем вопросе, я могу сделать следующее:
let mkQuery t q =
query { for rows in t do maxBy ((%q) rows) }
let getMaxDt1 = mkQuery table1 (<@ fun q -> q.Datadate @>)
let getMaxDt2 = mkQuery table2 (<@ fun q -> q.Datadate @>)
Мне было бы интересно, есть ли другие решения, не использующие кавычки. Причина в том, что для более сложных запросов цитаты и сращивание становятся трудночитаемыми.
Это, например, не будет работать, очевидно, поскольку мы не знаем, что x имеет свойство DataDate.
let getMaxDt t = query { for x in t do maxBy x.Datadate }
Если я не могу абстрагироваться от типа table1, table2 и т. д., которые генерируются SqlProvider.