Ответ 1
Это оператор null-coalescing.
Он возвращает первый аргумент, если он не равен нулю, и в этом случае он возвращает второй.
x ?? y
примерно эквивалентен этому (за исключением того, что первый аргумент оценивается только один раз):
if (x == null)
{
result = y;
}
else
{
result = x;
}
Или, альтернативно:
(x == null) ? y : x
Это полезно для предоставления значения по умолчанию, когда значение может быть нулевым:
Color color = user.FavouriteColor ?? defaultColor;
COALESCE
При использовании в запросе LINQ to SQL оператор ??
может быть переведен на вызов COALESCE. Например, этот запрос LINQ:
var query = dataContext.Table1.Select(x => x.Col1 ?? "default");
может привести к этому SQL-запросу:
SELECT COALESCE([t0].[col1],@p0) AS [value]
FROM [dbo].[table1] AS [t0]