连接来自 SQL 的值并绑定到数据表



希望你能帮到...

我有两个 SQL 表,一个有用户,另一个有用户位置,我需要将其合并到 C# 数据表中。

加入它们的基本查询不是问题,问题是用户可能会多次出现在位置表中。在这种情况下,我需要将每个位置传递给一行,而不是多次列出具有多个位置的用户。

它是 ADO.NET 邻近搜索的一部分,因此当前查询代表...

                DECLARE @lat float
                DECLARE @lon float
                SET @lat = @varLat
                SET @lon = @varLon
                DECLARE @point geography = geography::Point(@lat, @lon, 4326);
                DECLARE @distance float
                SET @distance = @varDistance
                SELECT t1.locationId, t1.city, t2.[firstName]+' '+[lastName] as name
                FROM _Locations t1 INNER JOIN _Users t2 ON t2.userId = t1.userId
                WHERE @point.STDistance(centerPoint) <= @distance

我觉得 LINQ 可能会有所帮助,但它不是我以前使用过的东西。

真的没有足够的信息给你正确的答案。它可以在SQL或代码中完成。这就是 T-SQL 方式。

SELECT u.ID, u.Name, 
stuff(
(select ', ' + ul.ID from UserLocations where ul.UserID = u.ID for xml path('')), 
1, 2, null) locs 
    FROM Users u

上级:

SELECT t2.[firstName]+' '+[lastName] as name,
       STUFF(
            (SELECT t1.locationId, t1.city FROM _Locations t1 
              WHERE t1.userId = t2.userId 
               AND @point.STDistance(centerPoint) <= @distance FOR XML PATH('')), 
            1, 2, NULL) locs
FROM _Users t2 

最终工作查询是...

 SELECT t2.[firstName]+' '+[lastName] as name,
        STUFF(
                (
                  SELECT ', ' + t1.city FROM _Locations t1 
                  WHERE t1.userId = t2.userId
                  AND @point.STDistance(centerPoint) <= @distance FOR XML PATH(''), type
                 ).value('.', 'varchar(max)'), 1, 1, ''
              )
          FROM _Users t2

最新更新