WedX - журнал о программировании и компьютерных науках

C# LINQ Как эффективно работать с нулевым возвратом?

Поэтому, когда я пишу операторы C# linq, мне часто хочется сделать что-то вроде этого:

string name = database.table.Where(t=>t.Field1 == row.Field1 && t.Field2 == row.Field).Select(b=> b.Name).FirstOrDefault().ToString();

Однако, если приведенный выше оператор ничего не возвращает, возникает ошибка, потому что вы не можете использовать .FirstOrDefault() для нулевого значения.

Итак, вместо этого я обычно делаю что-то вроде следующего:

var listOfNames = database.table.Where(t=>t.Field1 == row.Field1 && t.Field2 == row.Field).Select(b=> b.Name).ToList();
  
if(listOfNames.Count() > 0 ){
  string name =  listOfNames.FirstOrDefault().ToString();
}

Приведенный выше код кажется очень многословным, и я должен представить, что есть гораздо более чистый способ сделать это, имея дело с потенциальным нулевым возвращаемым значением.

Любое понимание или помощь будут оценены. Спасибо.

03.03.2021

  • Взгляните на нулевой условный оператор. например string name = /* ... */.FirstOrDefault()?.ToString(); -> установит name в null для пустой последовательности, иначе он будет результатом ToString() для первого элемента. 03.03.2021
  • Однако вы можете использовать FirstOrDefault() для пустой последовательности, что и вернет .Where. Чего вы не можете сделать, так это вызвать .ToString() для значения null, но в данном случае кажется ненужным делать это в любом случае (b.Name, вероятно, уже является строкой). Если вы рефлекторно добавляете .ToString() к вещам на всякий случай, это, вероятно, плохая привычка, поскольку нестроковые значения обычно требуют специальной обработки. 03.03.2021

Ответы:


1

У вас есть несколько способов:

  1. не используйте ToString() Я думаю, имя уже является строкой/varchar
string name = database.table
  .Where(t=>t.Field1 == row.Field1 && t.Field2 == row.Field)
  .Select(b=> b.Name)
  .FirstOrDefault()
// name now can be null since default(string) is null
  1. если вам нужно сделать ToString, вы можете использовать функции C # 6 — Null-conditional (?.)
string name = database.table
  .Where(t=>t.Field1 == row.Field1 && t.Field2 == row.Field)
  .Select(b=> b.Name)
  .FirstOrDefault()?.ToString(); // here ?
// name now can be null
  1. также рассмотрите оператор объединения с нулевым значением (??)
string name = database.table
  .Where(t=>t.Field1 == row.Field1 && t.Field2 == row.Field)
  .Select(b=> b.Name)
  .FirstOrDefault() ?? "some value"
// so if FirstOrDefault returns null then "some value" will be used
03.03.2021

2

Объедините .Where и .FirstOrDefault:

string name = database.table
  .FirstOrDefault(t=>t.Field1 == row.Field1 && t.Field2 == row.Field)
  ?.Name;
05.03.2021
Новые материалы

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

ИИ в аэрокосмической отрасли
Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


Для любых предложений по сайту: [email protected]