Quantifier Operations

Quantifier operations produce a Boolean value to indicate whether all or a portion of elements satisfy a specific condition.

LINQ performs these operations with three methods: All, Any, and Contains.

The All method determines if all elements within a sequence satisfy the given condition. Review its syntax below:

public static bool All<TSource>(
	this IEnumerable<TSource> source,
	Func<TSource, bool> predicate
)

Review an example of its use:

class Rides
{
	public string Name { get; set; }
	public int Year { get; set; }
}
public static void Examples()
{
	// spawn array of rides
	Rides[] rides = { new Rides { Name="Chevy", Year=17 },
					  new Rides { Name="Porche", Year=66 },
					  new Rides { Name="Pontiac", Year=64 } 
	};
				
	// Gather names starting with 'P'
	bool StartWB = rides.All(ride => ride.Name.StartsWith("P"));
				
	Console.WriteLine(
		"{0} pet names start with 'P'.",
		StartWB ? "All" : "Not all");
}

The Boolean result of the All method typically appears within a where clause or in a direct call to the Where method. Review an example of this usage below:

class ShowRide
{
	public string Name { get; set; }
	public int Year { get; set; }
}

class Competitor
{
	public string SurName { get; set; }
	public ShowRide[] ShowRides { get; set; }
}

public static void Examples()
{
	List<Competitor> competitor = new List<Competitor>{
	new Competitor{
					SurName = "Smith",
					ShowRides = new ShowRide[] {
						new ShowRide { Name="Bonneville", Year=64 },
						new ShowRide { Name="Nova", Year=64 },
						new ShowRide { Name="SS Impala", Year=63 }
			}
		},
	new Competitor {
					SurName = "Appiah",
					ShowRides = new ShowRide[] {
						new ShowRide { Name = "Chevelle", Year = 66 }
			}
		},
	new Competitor {
					SurName = "Shingledecker",
					ShowRides = new ShowRide[] {
						new ShowRide { Name ="Corvette", Year = 79 }
			}
		},
	new Competitor {
					SurName = "Brown",
					ShowRides = new ShowRide[] {
						new ShowRide { Name = "Belair", Year = 55 },
						new ShowRide { Name = "Transam", Year = 77 }
		}
	}
};

	// Determine competitors with cars newer than 1975
	IEnumerable<string> names = from competitor in competitors
where competitor.ShowRides.All(showride => showride.Year > 75)
	select competitor.SurName;

	foreach (string name in names)
	{
		Console.WriteLine(name);
}

The Any method determines the presence of any sequence elements satisfying a given condition. Review its syntax below:

public static bool Any<TSource>(
	this IEnumerable<TSource> source,
	Func<TSource, bool> predicate
)

Review an example of its use:

class Weapon
{
	public string Name { get; set; }
	public int Size { get; set; }
	public bool Upgraded { get; set; }
}
public static void Examples()
{
	// make weapon array
	Weapon[] weapons =
	{ new Weapon { Name="Destroyer", Size=9, Upgraded=true },
	  new Weapon { Name="Rattler", Size=2, Upgraded=false },
	  new Weapon { Name="Blaster", Size=5, Upgraded=false } };
				
	// find weapons over size 1 without an upgrade
	bool noupgrade = weapons.Any(w => w.Size > 1 && w.Upgraded == false);
	Console.WriteLine(
		"There are {0} weapons over size one without an upgrade.",
		noupgrade ? "are" : "are not any");
}

The Contains method determines if a sequence contains the element specified. Review its syntax below:

public static bool Contains<TSource>(
	this IEnumerable<TSource> source,
	TSource value
)

Review an example of its use:

string[] candies = { "gummi", "chocolate", "lollipop", "gum", "sourpower", "chews" };

string candy = "poprocks";

bool haspoprocks = candies.Contains(candy);

Console.WriteLine(
	"The array {0} contains '{1}'.", haspoprocks ? "does" : "does not", candy);