首页 > 解决方案 > 将 SQL 函数应用于 LINQ 查询的字段

问题描述

我需要使用 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; }
}

标签: c#sqllinq

解决方案


推荐阅读