using System.Collections.Generic;
public static void Main()
List<int> Scores = new List<int>() { 97, 92, 81, 60 };
List<Test> testers = new List<Test>();
foreach (var s in Scores)
testers.Add(new Test(s));
var query = testers.Where(s => s.over).MinByOrDefault(s => s.calculate());
Console.WriteLine(query != null ? "" + query.calculate() : "null");
var other = testers.Where(s => s.over).Select(s => s.calculate()).MinByOrDefault(s => s);
Console.WriteLine(other);
var multiple = testers.Where(s => s.over).Select(s => s.calculate());
Console.WriteLine("y" + multiple.Min());
static T CompareBy<T, U>(this IEnumerable<T> ts, Func<T, U> selector, int modifier, bool throws)
var comparer = Comparer<U>.Default;
using (var e = ts.GetEnumerator())
throw new ArgumentException("Collection must not be empty.", "ts");
var nextU = selector(nextT);
if (comparer.Compare(nextU, u) * modifier < 0)
public static T MinByOrDefault<T, U>(this IEnumerable<T> ts, Func<T, U> selector)
return ts.CompareBy(selector, 1, false);