Учитывая следующей таблице:LINQ к SQL C# COALESCE
Length | Width | Color | ID
===========================
18 | 18 | blue | 1
---------------------------
12 | 12 | red | 1
---------------------------
Я хочу, чтобы произвести один столбец/строку:
SIZES
=================
18 x 18, 12 x 12,
Я могу это сделать в SQL следующим образом:
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
Но я не могу понять, как это сделать в LINQ.
Ближайший я получил:
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) + ", ")
}
Который производит один столбец и две строки:
SIZES
========
18 x 18,
12 X 12,
обращенными неважны проблемы. Столбцы определяются как float, хотя все являются целыми числами. Ключом является функция COALESCE, я не могу понять, как это сделать в LINQ.
Как указывали другие, LINQ и T-SQL не идентичны с точки зрения функциональности, но у меня есть вопрос для вашего SQL: почему объединение? Почему бы просто не сделать «SET @SIZES = '» перед оператором select, противоположным объединению каждой строки – John