Хорошо, может быть, кто-нибудь знает лучшее решение, но после некоторых исследований я не смог достичь этого с pure ef core, поэтому я использовал FromSql
var queryable = qLogs.FromSql("select * from \"" + tableName + "\" order by \"" + orderField + "\"");
var result = qCars.Select(x => new RouteModel
{
Mileage = Math.Round(
queryable
.Where(y => y.CarId == x.Id)
.Select(y => PostgisExtensions.ST_LengthSpheroid(
PostgisExtensions.ST_MakeLine(
PostgisExtensions.ST_GeomFromText(y.Location.AsText(), PostgisConstants.MetricSrid)
),
PostgisConstants.SpheroidWgs84)
)
.FirstOrDefault() / 1000),
.....
теперь я могу orderby
, используя подвыбор без groupby
или distinct on
.Прекрасно работает без каких-либо предупреждений ядра и генерирует ожидаемый запрос:
SELECT ROUND(COALESCE((
SELECT ST_LengthSpheroid(ST_MakeLine(ST_GeomFromText(ST_AsText(x0."Location"), 4326)), 'SPHEROID["WGS 84",6378137,298.257223563]')
FROM (
select * from "Logs" order by "FixedAt"
) AS x0
WHERE (x0."CarId" = x."Id")
LIMIT 1
), 0.0) / 1000.0) AS "Mileage",
.....