Редактировать: прочитайте свой комментарий, попробуйте создать функцию.
Func<int, Func<List<IUser>, bool>> createFn = (min) =>
(l) => (l.Count(u => u.FirstName == "John") > min);
Func<List<IUser>, bool>> contains0 = createFn(0);
Assert.AreEqual(true, contains0(userList));
Func<List<IUser>, bool>> contains3 = createFn(3);
Assert.AreEqual(true, contains3(userList));
Попробуйте использовать массив из 1 элемента.Ужасно, но это работает.
var values = new int[] { 0 };
Expression<Func<List<IUser>, bool>> ulContainsJohn =
(l => l.Where(u => u.FirstName == "John").Count() > values[0]);
Assert.AreEqual(true, ulContainsJohn.Compile()(userList));
values[0] = 3;
Assert.AreEqual(true, ulContainsJohn.Compile()(userList));
Другой вариант, лучше:
private int Minimum { get; set; }
...
Expression<Func<List<IUser>, bool>> ulContainsJohn =
(l => l.Where(u => u.FirstName == "John").Count() > Minimum);
Func<List<IUser>, bool> fn = ulContainsJohn.Compile();
Assert.AreEqual(true, fn(userList));
Minimum = 3;
Assert.AreEqual(true, fn(userList));