Мне нужно получить набор записей из базы данных, используя 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; }
}