EF.Functions.Distance с конвертором внутри

мне нужно конвертировать

public record GeoPoint(double Latitude, double Longitude);

в NetTopologySuite т.к. в сущности я не могу использовать напрямую зависимости

в переводе в sql происходит ошибка

.Where(p => p.Name == __8__locals1_pointDto_Name_0 || p.PointTypeId == __8__locals1_pointDto_PointTypeId_1 || __Functions_2\r\n .Distance(\r\n geometry: GeoPointConverter.ToProvider(p.Coordinates), \r\n anotherGeometry: __coord_3, \r\n useSpheroid: True) < 0,0001)' could not be translated.

сам код с ошибкой

                var existingPoints = await FindAsync(p =>
                p.Name == pointDto.Name ||
                (
                p.PointTypeId == pointDto.PointTypeId &&
                EF.Functions.Distance(
                    Location.GeoPointConverter.ToProvider(p.Coordinates),
                    coord, true) < 0.0001d)
                );

реализация поиска

public async Task<IEnumerable<T>> FindAsync(
     Expression<Func<T, bool>> predicate,
     params Expression<Func<T, object>>[] includes)
 {
     var query = _dbSet.Where(predicate);

     foreach (var include in includes)
         query = query.Include(include);

     return await query.ToListAsync();
 }

конвертер

public class GeoPointConverter : ValueConverter<GeoPoint, Geometry>
{
    private static readonly GeometryFactory _geometryFactory = new(new PrecisionModel(), 4326);

    public GeoPointConverter() : base(
        domainValue => ToProvider(domainValue),
        dbValue => FromProvider(dbValue))
    {
    }

    public static Geometry ToProvider(GeoPoint domainPoint)
    {
        return _geometryFactory.CreatePoint(
            new Coordinate(domainPoint.Longitude, domainPoint.Latitude)
        );
    }

    public static GeoPoint? FromProvider(Geometry dbPoint)
    {
        if (dbPoint == null || dbPoint.IsEmpty)
            return null;

        return new GeoPoint(
            dbPoint.Coordinate.Y,  // Latitude
            dbPoint.Coordinate.X   // Longitude
        );
    }
}

Ответы (0 шт):