Linq выбрать первый или null

Допустим есть какая-то выборка данных. Мне нужно совершить запрос и узнать есть ли какой-то элемент и получить его если он сущесвует.

Вариант 1:
object MyObject = null;
if(DataContext.SomeTable.Where(....).Any())
{
MyObject = DataContext.SomeTable.First(....);
}


очевидна проблема: будет выполнено два запроса.

Вариант 2:
object MyObject = null;
List<object> MyObjectList = DataContext.SomeTable.Where(....).Take(1).ToList();
if(MyObjectList.Any())
{
MyObject = MyObjectList.First();
}

Теперь проблемы нет, один запрос. Но как-то это возня с List напрягает. Почему нет например FirstOrNull? Можно конечно свой метод-расширение написать, но должен же быть удобный механизм?

UPD: набросал для себя метод-расширение. Скажите мне что я изобрел велосипед и как правильно сделать то что мне нужно?
/// <summary>
/// Возвращает первый подходящий элемент или null
/// </summary>
/// <typeparam name="T">Тип элемента</typeparam>
/// <param name="source">Источник для поиска</param>
/// <param name="predicate">Функция для фильтрации элементов в источнике</param>
/// <returns>Первый подходящий элемент или null</returns>
public static T FirstOrNull<T>(this IEnumerable<T> source, Func<T, bool> predicate = null) where T : class
{
List<T> lst = null;
if (predicate != null)
lst = source.ToList();
else
lst = source.Where(predicate).Take(1).ToList();
if (lst.Any())
return lst.First();
else
return null;
}
  • Вопрос задан
  • 3229 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы