Подтвердить что ты не робот

Как назначить пустую строку, если значение равно null в запросе linq?

У меня есть следующий запрос LINQ для получения набора данных.

var fields = from row in datarows
from field in row
from col in columnnames
where field.Key == col
select new { ColumnName = col, FieldValue = field.Value };

Проблема в том, что мой код, обрабатывающий поля после этого запроса, терпит неудачу, потому что field.Value некоторых строк возвращает null.

Моя цель - назначить пустую строку, если обнаружен null.

Что-то вроде if field.Value == null, then field.Value = ""

Возможно ли это сделать в запросе linq?

4b9b3361

Ответ 2

FieldValue = field.Value ?? String.Empty

Ответ 3

Используйте null-coalescing operator

select new { ColumnName = col, FieldValue = field.Value ?? string.Empty };

оператор называется оператором с нулевым коалесцированием и используется для определения значения по умолчанию для типов допустимых значений или ссылочных типов. Он возвращает левый операнд, если операнд не равен нулю; в противном случае он возвращает правый операнд.

Ответ 4

FieldValue = field.Value == null? "": field.Value

Ответ 5

Используйте ?, чтобы вернуть пустую строку в случае null

var fields = from row in datarows
from field in row
from col in columnnames
where field.Key == col
select new { ColumnName = col, FieldValue = (field.Value ?? string.Empty) };

Ответ 6

var fields = from row in datarows
from field in row
from col in columnnames
where field.Key == col
select new { ColumnName = col, FieldValue = field.Value == null ? string.Empty: field.Value};

Ответ 7

Я также узнал, что если вы объединяете два поля в присваивании полей linq и используете оператор объединения нулей только для одного из этих полей, то вам необходимо заключить круглые скобки вокруг оператора поля следующим образом:

StreetAddr = customer.StreetAddr + ", " + (customer.Suite ?? "")

Тем не менее, этот код также не так хорош, потому что, если поле "Suite" имеет значение null, то я все еще получаю это запятую "," зависающую после поля "StreetAddr". Хотел бы я знать, как это исправить?