从SQL连接值并绑定到Datatable

时间:2015-04-27 11:35:45

标签: c# sql linq

希望你能帮忙......

我有两个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可能有所帮助,但它不是我以前用过的东西。

2 个答案:

答案 0 :(得分:2)

实际上没有足够的信息可以给你正确答案。它可以在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

UPD:

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 

答案 1 :(得分:0)

最终工作查询是......

 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