Reputation: 123
I have a list List<OfferComparison> Comparison
. I want to
check if all the items have Value == null
in an if
condition.
How can I do it with linq?
public class OfferComparison : BaseModel
{
public string Name { get; set; }
public string Value { get; set; }
public bool Valid { get; set; }
}
Upvotes: 3
Views: 14010
Reputation: 37299
Updated (post C# 7) Answer
If using C# 7 or 8 then one could use the is
keyword together with Linq.All
:
var result = Comparison.All(item => item.Value is null)
If using C# 9 then one could use the is not null
together with Linq.Any
:
var result = Comparison.Any(item => item.Value is not null)
If using C# 9 then one could also use the is object
or is {}
together with Linq.Any
:
var result = Comparison.Any(item => item.Value is object)
All these options are somewhat equivalent. At least in terms of time complexity they are all O(n)
. I guess the "preferred" option simply depends on personal opinion.
Original (pre C# 7) Answer
Using linq method of All
:
var result = Comparison.All(item => item.Value == null)
Basically what it does is to iterate all items of a collection and check a predicate for each of them. If one does not match - result is false
Upvotes: 19
Reputation: 2212
I'm not totally sure about the internal differences of All
and Exists
, but it might be a good idea to just check whether one of the entries is not null and then negate the result:
var result = !Comparison.Exists(o => o.Value != null);
I would expect this query to quit after the first non-null value was found and therefore to be a little more efficient.
Update: From the Enumerable.All documentation:
The enumeration of source is stopped as soon as the result can be determined.
Therefore, using All
will probably not result in the entire list getting processed after a non-null value has been found.
So the aforementioned possible performance gain is not likely to occur and both solutions probably do not differ.
Upvotes: 1
Reputation: 7352
You can check by this linq statement
var isNull = Comparison.All(item => item.Value == null);
Upvotes: 4