using System.Collections.Generic;
using System.Linq.Expressions;
public static void Main()
var where = typeof(Enumerable).GetMethods(BindingFlags.Public | BindingFlags.Static)
.First(mi => mi.Name == "Where" && mi.GetParameters().Length == 2);
var whereItem = where.MakeGenericMethod(typeof(Item));
IList<Item> items = new List<Item>
Func<Item, bool> filter = i => i.I > 1;
var expr = Expression.Call(whereItem, Expression.Constant(items), Expression.Constant(filter));
var enumerable = Expression.Lambda<Func<IEnumerable<Item>>>(expr).Compile()();
Console.WriteLine(enumerable.Count());
public int I { get; set; }