Выполните запрос 'select * from (select * from ...)' в ef core 2.2 - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь выполнить подобный запрос с подзапросом к этому (SQL) в c #, используя ядро ​​платформы сущностей 2.2

select ST_LengthSpheroid(ST_MakeLine(a."Location"),'SPHEROID["WGS 84",6378137,298.257223563]') AS Length
from (select * from "Logs" where "CarId" = 191
      order by "Id") as a;

в структуре сущностей> 2.0, я пытался выполнить левые соединения,но с пользовательскими функциями я сталкиваюсь с основными предупреждениями или ошибками.Есть ли какие-либо правильные способы реализовать этот запрос?

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Хорошо, может быть, кто-нибудь знает лучшее решение, но после некоторых исследований я не смог достичь этого с 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", 
  .....
0 голосов
/ 28 февраля 2019

Хотелось бы что-нибудь подобное?

select ST_LengthSpheroid(ST_MakeLine(TrackerLogs.Location),'SPHEROID["WGS 84",6378137,298.257223563]') AS Length
from TrackerLogs
where CarId = 191
order by Id
...