Pour le faire en .NET 2.0 (sans LINQ), par exemple pour SQL-Server ReportingServices sans devoir écrire une fonction pour cela :
VB.NET
Dim a As String = "", b As String = "b", c As String = "", d As String = "d", e As String = ""
Dim lala As String = String.Join(" / ", String.Join(vbBack, New String() {a, b, c, d, e}).Split(New Char() {ControlChars.Back}, System.StringSplitOptions.RemoveEmptyEntries))
System.Console.WriteLine(lala)
C# (pour ceux qui débarquent de google et ne cherchent pas VB.NET)
string a = "", b = "b", c = "", d = "d", e = "";
string lala = string.Join(" / ",
string.Join("\u0008",
new string[] { a, b, c, d, e }
).Split(new char[] { '\u0008' }, System.StringSplitOptions.RemoveEmptyEntries)
);
System.Console.WriteLine(lala);
Cela suppose que le caractère backspace n'apparaît pas dans vos chaînes de caractères (ce qui devrait normalement être vrai, car vous ne pouvez pas simplement saisir ce caractère au clavier).
De plus, si vous récupérez les valeurs dans une base de données, c'est encore plus simple, puisque vous pouvez le faire directement en SQL :
PostgreSQL et MySQL :
SELECT
concat_ws(' / '
, NULLIF(searchTerm1, '')
, NULLIF(searchTerm2, '')
, NULLIF(searchTerm3, '')
, NULLIF(searchTerm4, '')
) AS RPT_SearchTerms;
Et même avec le glorieux MS-SQL-Server, c'est possible (PS : c'est du sarcasme) :
DECLARE @in_SearchTerm1 nvarchar(100)
DECLARE @in_SearchTerm2 nvarchar(100)
DECLARE @in_SearchTerm3 nvarchar(100)
DECLARE @in_SearchTerm4 nvarchar(100)
SET @in_SearchTerm1 = N'a'
SET @in_SearchTerm2 = N''
SET @in_SearchTerm3 = N'c'
SET @in_SearchTerm4 = N''
SELECT
COALESCE
(
STUFF
(
(
SELECT ' / ' + RPT_SearchTerm AS [text()]
FROM
(
SELECT NULLIF(@in_SearchTerm1, N'') AS RPT_SearchTerm, 1 AS RPT_Sort
UNION ALL SELECT NULLIF(@in_SearchTerm2, N'') AS RPT_SearchTerm, 2 AS RPT_Sort
UNION ALL SELECT NULLIF(@in_SearchTerm3, N'') AS RPT_SearchTerm, 3 AS RPT_Sort
UNION ALL SELECT NULLIF(@in_SearchTerm4, N'') AS RPT_SearchTerm, 4 AS RPT_Sort
) AS tempT
WHERE RPT_SearchTerm IS NOT NULL
ORDER BY RPT_Sort
FOR XML PATH(N''), TYPE
).value('.', 'nvarchar(MAX)')
,1
,3
,N''
)
,N''
) AS RPT_SearchTerms