LinQ, значение по умолчанию в выборке

Задача: в LinQ запросе вернуть единственное значение или значение по умолчанию если запрос не вернет ни одного элемента.

В принципе есть стандартные методы. SingleOrDefault возвращает значение по умолчанию и выбрасывает исключение если запрос вернул несколько элементов, FirstOrDefault не выбрасывает исключения, если запрос вернул несколько параметров и просто выдает первое значение. Но у них есть один недостаток - невозможно задать значение по умолчанию, которые они вернут в случае отсутствия результатов. Более того, возвращаемые ими значения невнятные и недокументированные, в основном null.

А если мы хотим например для строки сразу вернуть пустую строку или "не найдено"? В данном случае нам поможет метод DefaultIfEmpty, данный оператор добавит дополнительный фильтр на запрос, после чего можно вызвать простейший Single

string someString = _someTable.AsEnumerable()
                    .Where(dataRow => dataRow.Field<int>("field_with_id") == someIntIdVariable)
                    .Select(dataRow => dataRow.Field<string>("field_with_string"))
                    .DefaultIfEmpty("НЕ НАЙДЕНО").Single();

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>