Использование лямбды для выбора первой строки, возвращаемой из DataTable
У меня есть DataTable с именем currencyAmounts, и с помощью лямбды мое выражение работало нормально, пока в возвращении не было более одной возможности. Я ищу в DataTable соответствие моей переменной "value". Как я могу изменить следующее выражение, чтобы просто выбрать первую возвращенную строку:
DataRow resultRow = currencyAmounts.AsEnumerable().Single(r => ((decimal)r["OriginalAmount"]) == value);
Я получаю следующую ошибку при запуске:
Последовательность содержит более одного совпадающего элемента
4 ответа
Сообщение об ошибке объясняет все это на самом деле. Single() создает исключение, когда в условии более одного совпадающего элемента (или нет элемента). Вы должны использовать First()
или же FirstOrDefault()
DataRow resultRow = currencyAmounts.AsEnumerable().FirstOrDefault(r => ((decimal)r["OriginalAmount"]) == value);
Вы можете изменить "Single()" на "First()".
Это потому, что single (со страницы Microsoft) "Возвращает единственный элемент последовательности и выдает исключение, если в последовательности нет точно одного элемента".
Сингл выдаст ошибку, если в коллекции больше или меньше 1 элемента.
Если вы хотите первое и уверены, что всегда есть хотя бы один результат, используйте
.Single();
Если вы не уверены, что всегда есть хотя бы один результат, используйте
.SingleOrDefault();