An alternative to using the ternary operator in Lambda

My code currently looks like this.

  PhoneNumber = x.PhoneNumbers.FirstOrDefault ()! = Null?  x.PhoneNumbers.FirstOrDefault (). PhoneNumber: string.Empty,

PhoneNumbers is an ICollection<PhoneNumber>

This is also in .Select() , so I cannot create a variable for it outside.

Resharper complains that x.PhoneNumbers.FirstOrDefault() may be null and, frankly, not selling out on the idea that I should do FirstOrDefault twice.

Any other ideas, I think there might be another Lambda method, I can do something like this.

+4
source share
3 answers
 PhoneNumber = x.PhoneNumbers.Select(pn => pn.PhoneNumber).FirstOrDefault() ?? "", 
+12
source

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, ""); 
+8
source
 var result = new List<Product>(); result = result.Where(o => o.Name == (string.IsNullOrEmpty(_nameParameter) ? o.Name : _nameParameter)).ToList(); 
0
source

Source: https://habr.com/ru/post/1487338/


All Articles