TSQL 数组初始化和 LINQ Where on Array
TSQL Array Initialization and LINQ Where on Array
我正在尝试对 T-SQL 中的地址执行字符串聚合,以便在逗号分隔的字符串中使用任何不为 NULL 的地址字段。我知道如何在 C# 中执行此操作,但我迷失了 SQL.
这是我到目前为止的内容(我需要将 C# 部分转换为 SQL):
SELECT STRING_AGG
(
--Start of C# (I don't know how to convert this into SQL).
new[]
{
Addresses.Line1,
Addresses.Line2,
Addresses.Line3,
Addresses.City,
Addresses.County,
Addresses.State,
Countries.Name,
Addresses.Postcode
}
.Where(data => data != null)
--End of C#
,
', '
) Address
FROM Addresses
JOIN Countries ON Countries.Id = Addresses.CountryId
不过,就我个人而言,我会把它们作为列返回并担心应用程序代码中的格式设置!
STRING_AGG
真正用于连接 行 数据;你正在使用 列 ,所以你最好做一些类似的事情:
SELECT CONCAT(Addresses.Line1,
N', ' + Addresses.Line2,
N', ' + Addresses.Line3,
-- ...
N', ' + Addresses.Postcode)
CONCAT
忽略 null
值,如果 {some column}
是 null
,N',' + {some column}
将是 null
,因此这会删除中间分隔符对于所有省略的值。它 does 有点假设 Line1
有一个值 - 如果没有它,可能会有一个前导逗号。如果需要,您可以删除它。
我正在尝试对 T-SQL 中的地址执行字符串聚合,以便在逗号分隔的字符串中使用任何不为 NULL 的地址字段。我知道如何在 C# 中执行此操作,但我迷失了 SQL.
这是我到目前为止的内容(我需要将 C# 部分转换为 SQL):
SELECT STRING_AGG
(
--Start of C# (I don't know how to convert this into SQL).
new[]
{
Addresses.Line1,
Addresses.Line2,
Addresses.Line3,
Addresses.City,
Addresses.County,
Addresses.State,
Countries.Name,
Addresses.Postcode
}
.Where(data => data != null)
--End of C#
,
', '
) Address
FROM Addresses
JOIN Countries ON Countries.Id = Addresses.CountryId
不过,就我个人而言,我会把它们作为列返回并担心应用程序代码中的格式设置!
STRING_AGG
真正用于连接 行 数据;你正在使用 列 ,所以你最好做一些类似的事情:
SELECT CONCAT(Addresses.Line1,
N', ' + Addresses.Line2,
N', ' + Addresses.Line3,
-- ...
N', ' + Addresses.Postcode)
CONCAT
忽略 null
值,如果 {some column}
是 null
,N',' + {some column}
将是 null
,因此这会删除中间分隔符对于所有省略的值。它 does 有点假设 Line1
有一个值 - 如果没有它,可能会有一个前导逗号。如果需要,您可以删除它。