Извлечение одного элемента из запроса LINQ

#linq #asp.net-core

#linq #asp.сетевое ядро

Вопрос:

Впервые за долгое время работаю с LINQ и пытаюсь что-то исправить. У меня есть следующие заявления:

 var element = await _Entities.References  .Where(db =gt; db.LoadId == request.LoadId amp;amp; db.ReferenceCode == "123")  .OrderByDescending(rec =gt; rec.Created).FirstOrDefaultAsync(cancellationToken);   if (element != null) {  dto.ElementValue = element.Value;  }  

Я хотел бы сжать это в один оператор, если это возможно, но у меня возникли проблемы с получением только значения из метода await.

Ответ №1:

Вы могли бы сделать что-то вроде этого:

 dto.ElementValue = (await _Entity.References  .Where(db =gt; db.LoadId == request.LoadId amp;amp; db.ReferenceCode == "123")  .OrderByDescending(rec =gt; rec.Created)  .FirstOrDefaultAsync(cancellationToken))?.Value   ?? dto.ElementValue;  

Обратите внимание, что технически это изменяет поведение кода. Ранее, если запрос не возвращает результат, ElementValue свойство не затрагивается. С помощью однострочного, если запрос не возвращает результат, ElementValue будут вызваны как геттер, так и сеттер.

Кроме того, если запрос возвращает результат , значение которого Value равно null , ElementValue свойство будет установлено само по себе, а не null .