【问题标题】:Concatenate values from SQL and bind to Datatable连接来自 SQL 的值并绑定到 Datatable
【发布时间】:2015-04-27 11:35:44
【问题描述】:

希望你能帮忙...

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

【问题讨论】:

  • 哪个 dbms? (此处需要非 ANSI SQL...)
  • 谢谢蒂姆,但如果我理解正确,那只有在我指定 Id 来连接值时才有效。每当重复 id 时,我都需要它来执行此操作。

标签: c# sql linq


【解决方案1】:

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

【讨论】:

  • 感谢 Eldar,很高兴提供更多信息,之前从未发布过问题,因此不确定您需要什么。
  • 您使用什么来处理您的数据库:ADO.NET、LINQtoSQL、EF 或其他什么?您能否提供那段代码,以便我可以建议您“代码”解决方案。
  • 我现在编辑了原始问题以包含它。它是 ADO.NET 邻近搜索的一部分。
  • 效果很好,从来不知道这种方法存在。谢谢埃尔达! :)
【解决方案2】:

最终的工作查询是...

 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    • 2018-02-02
    • 1970-01-01
    • 2020-04-03
    • 1970-01-01
    相关资源
    最近更新 更多