using System.Collections.Generic;
using System.Linq.Expressions;
public static void Main()
var p = new Parent() { Children = new List<ChildA>() };
var child1 = new ChildA() { Name = "Joe" };
var child2 = new ChildA() { Name = "Sarah" };
var child3 = new ChildA() { Name = "Mike" };
var spec = new Specification<Parent>();
Expression<Func<Parent, IList<ChildA>>> exp1 = x => x.Children.Where(c => c.Name == "Joe").ToList();
LambdaExpression e = exp1;
p.Children.Select<ChildA>(e);
public abstract class Child {}
public List<ChildA> Children;
public class Specification<T> where T : Parent
public Expression<Func<T, IList<Y>>> CreateExpression<Y>(Expression<Func<T, IList<Child>>> toBeConverted)
return toBeConverted as Expression<Func<T, IList<Y>>>;
public class ChildA : Child
public string Name { get; set; }
public class ChildB : Child
public string Name { get; set; }