The first option, for example, Markus's:
PhoneNumber = x.PhoneNumbers.Select(x => x.PhoneNumber) .FirstOrDefault() ?? "";
Another alternative:
PhoneNumber = x.PhoneNumbers.Select(x => x.PhoneNumber) .DefaultIfEmpty("") .First();
Or, if you do so much, you can write your own method to combine the two:
public static TElement ProjectedFirstOrDefault<TSource, TElement> (this IEnumerable<TSource> source, Func<TSource, TElement> selector, TElement defaultValue) where TElement : class { var firstElement = source.FirstOrDefault(); return firstElement == null ? defaultValue : selector(firstElement); }
Then:
PhoneNumber = x.PhoneNumbers.ProjectedFirstOrDefault(x => x.PhoneNumber, "");
source share