Ну, Select(el => el)
не годится для вас.
Я предлагаю вам использовать SingleOrDefault
:
var productId = element.Elements("ProductId").SingleOrDefault();
if (productId != null)
filter.ProductId = Convert.ToInt32(productId.Value);
Обратите внимание, что это обрабатывает случай, когда нет элементов ProductId, но выдает исключение, если больше, чем один . Если это действительно правильный случай, то ваш текущий код (без избыточного вызова Select
) является разумным.
РЕДАКТИРОВАТЬ: Вы могли бы уйти от этого с:
var productId = element.Elements("ProductId")
.Select(elt => elt.Value)
.SingleOrDefault();
filter.ProductId = Convert.ToInt32(productId ?? filter.ProductId.ToString());
Но это ужасно;)
По существу, у вас есть условие - вы можете установить ProductId
, только если оно указано. Оператор if - это общепринятый способ условного выполнения кода:)
Есть альтернативы:
filter.ProductId = productId == null
? filter.ProductId
: int.Parse(productId);
Если вы не возражаете против установки filter.ProductId
в 0, если идентификатор не указан, то вы можете просто использовать:
filter.ProductId = Convert.ToInt32(element.Elements("ProductId")
.Select(elt => elt.Value)
.SingleOrDefault());
(из-за способа, которым Convert.ToInt32
возвращает 0 при передаче нулевого аргумента.)