3

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; }
}
1

3 Answers 3

19

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


Sign up to request clarification or add additional context in comments.

Comments

4

You can check by this linq statement

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

Comments

1

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.