using System; using System.Linq; using System.Collections.Generic; class Program { public class Foo { public string data { get; set; } } public class Bar : Foo { } static void Main(string[] args) { var bars = new List(); bars.Add(new Bar() { data = "hello" }); bars.Add(new Bar() { data = "world" }); var resultsA = GetFoos(bars, (b => b.data.StartsWith("h"))); var resultsB = GetBars(bars, (b => b.data.StartsWith("h"))); } static List GetFoos(IEnumerable fooList, Func criteria) { return fooList.Where(criteria).ToList(); } static List GetBars(IEnumerable barList, Func criteria) { return barList.Where(criteria).ToList(); } }