EntityFramework 两个参数连续(中间有空格)问题

昨天在项目中,用到 EntityFramework 通过SQL语句查询。

具体的SQL语句如下:

复制代码
SELECT
    t.*
FROM
    (
        SELECT
            c.id AS CommunityId,
            c.`name` AS CommunityName,
            ASTEXT(c.spatial_data) AS CommunitySpatialData,
            s.id AS StreetId,
            s.`name` AS StreetName,
            ASTEXT(s.spatial_data) AS StreetSpatialData,
            MBRContains (s.spatial_data ,ST_GeometryFromText('Point(@Longitude @Latitude)')) AS streetIn,
            MBRContains (c.spatial_data ,ST_GeometryFromText('Point(@Longitude @Latitude)')) AS communityIn
        FROM
            community c
        LEFT JOIN street s ON c.street_id = s.id
    ) AS t
WHERE
    t.streetIn = 1
AND t.communityIn = 1;
复制代码

应该说这样没有问题的,但是查询一直报错:“Invalid GIS data provided to function st_geometryfromtext.”

换了多种传参方式,但是都还有问题。

经过各种调试、修改参数,大致可以确定是:两个参数是连续的,中间有空格,但是在参数替换后空格替换没了,导致数据格式出错。

再次调整下传的参数就可以,修改后SQL语句:

复制代码
SELECT
    t.*
FROM
    (
        SELECT
            c.id AS CommunityId,
            c.`name` AS CommunityName,
            ASTEXT(c.spatial_data) AS CommunitySpatialData,
            s.id AS StreetId,
            s.`name` AS StreetName,
            ASTEXT(s.spatial_data) AS StreetSpatialData,
            MBRContains (s.spatial_data ,ST_GeometryFromText(@point)) AS streetIn,
            MBRContains (c.spatial_data ,ST_GeometryFromText(@point)) AS communityIn
        FROM
            community c
        LEFT JOIN street s ON c.street_id = s.id
    ) AS t
WHERE
    t.streetIn = 1
AND t.communityIn = 1;
复制代码

对应的 point 是:

string point = "Point(" + Longitude + " " + Latitude + ")";

虽然知道了问题,也解决了,但是没有彻底解决这个问题。

有知道的可以告知下。

 

注意:

1、对于面数据:最后一个点应该是第一个点,这样在入库的时候才正确,否则报错“Invalid GIS data provided to function st_geometryfromtext.”

posted @   漠里  阅读(1843)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示