Применить функцию SQL к полю, запрашиваемому LINQ - PullRequest
0 голосов
/ 20 марта 2020

Мне нужно получить набор записей из базы данных, используя LINQ, но одно из полей, которые я запрашиваю, должно быть преобразовано функцией SQL. Как я понимаю, запрос LINQ:

var records = context.Geometries
            .Where(x => x.Name == "SomeName")
            .ToList();

возвращает некоторую строку SQL, например:

select Id, Name, Shape from MyGeometries where Name = 'SomeName'

, если класс MyGeometry выглядит следующим образом:

public class MyGeometry
{
    [Key]
    public Guid Id { get; set; }

    public string Name { get; set; }

    [Column(TypeName = "geometry")]
    public Geometry Shape { get; set; }
}

Есть ли какой-нибудь метод расширения LINQ для применения функции SQL к одному из полей? Это может выглядеть следующим образом:

var records = context.MyGeometries
            .ApplySql(x => x.Shape, "ST_Transform", param1, param2...)
            .Where(x => x.Name == "SomeName")
            .ToList();

Тогда сгенерированный SQL должен быть таким:

select Id, Name, ST_Transform(Shape, param1, param2...) from MyGeometries where Name = 'SomeName'

Или к свойству модели применяется какой-либо атрибут с именем функции, который будет вызван всегда, когда я запрашиваю его в LINQ? Как то так:

public class MyGeometry
{
    [Key]
    public Guid Id { get; set; }

    public string Name { get; set; }

    [Column(TypeName = "geometry")]
    [ApplySql("ST_Transform", param1, param2...)]
    public Geometry Shape { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...