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.”


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM