Insafian
Insafian

Reputation: 123

Check null value in a list using linq

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

Answers (3)

Gilad Green
Gilad Green

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

Onkel Toob
Onkel Toob

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

Mostafiz
Mostafiz

Reputation: 7352

You can check by this linq statement

var isNull = Comparison.All(item => item.Value == null);

Upvotes: 4

Related Questions