SQL C Vu le tableau suivant:LINQ to # COALESCE
Length | Width | Color | ID
===========================
18 | 18 | blue | 1
---------------------------
12 | 12 | red | 1
---------------------------
Je veux produire une seule colonne/ligne:
SIZES
=================
18 x 18, 12 x 12,
Je peux le faire dans SQL comme suit:
DECLARE @SIZES VARCHAR(8000)
SELECT @SIZES = COALESCE(@SIZES, '') + Convert(varchar(80), [Length]) + ' x ' +
Convert(varchar(80), [Width]) + ', '
FROM table
where ID = 1
GROUP BY [Length], [Width]
ORDER BY [Length], [Width]
SELECT SIZES = @SIZES
Mais je ne peux pas comprendre comment faire cela dans LINQ.
Le plus proche je suis arrivé était:
from t in table
where id == 1
group t by new {
t.Length,
t.Width
} into g
orderby g.Key.Length, g.Key.Width
select new {
SIZES = (Convert.ToInt32(g.Key.Length) + " x " +
Convert.ToInt32(g.Key.Width) + ", ")
}
qui produit une colonne et deux lignes:
SIZES
========
18 x 18,
12 X 12,
Les convertis ne sont pas importants au problème. Les colonnes sont définies comme des flottants bien que tous soient des entiers. La clé est la fonction COALESCE Je ne peux pas comprendre comment faire cela dans LINQ.
Comme les autres l'ont souligné, LINQ et T-SQL ne sont pas identiques en termes de fonctionnalités, mais j'ai une question pour votre SQL: Pourquoi le coalesce? Pourquoi ne pas simplement faire "SET @SIZES = ''" avant l'instruction select, opposée à la coalescence sur chaque ligne – John