Использование лямбды для выбора первой строки, возвращаемой из 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) "Возвращает единственный элемент последовательности и выдает исключение, если в последовательности нет точно одного элемента".

Тебе нужно First вместо Single

Сингл выдаст ошибку, если в коллекции больше или меньше 1 элемента.

Если вы хотите первое и уверены, что всегда есть хотя бы один результат, используйте

.Single();

Если вы не уверены, что всегда есть хотя бы один результат, используйте

.SingleOrDefault();
Другие вопросы по тегам