using System.Collections.Generic;
using DynamicExpression=System.Linq.Dynamic.DynamicExpression;
using System.Linq.Expressions;
static List<Part> parts = new List<Part>();
public static void Main()
Console.WriteLine("Dynamic Linq Predicate Demo using String Expression");
parts.Add(new Part() { PartName = "crank arm", PartId = 1234 });
parts.Add(new Part() { PartName = "chain ring", PartId = 1334 });
parts.Add(new Part() { PartName = "regular seat", PartId = 1434 });
parts.Add(new Part() { PartName = "banana seat", PartId = 1444 });
parts.Add(new Part() { PartName = "cassette", PartId = 1534 });
parts.Add(new Part() { PartName = "shift lever", PartId = 1634 }); ;
var p2=FindByStringExpression();
Console.WriteLine("P1 IsEqualto P2: {0}",p1.Equals(p2));
static Part FindByLambda()
Console.WriteLine("------- Find items using lambda expression ------");
var part= parts.Find(x => x.PartId==1444);
Console.WriteLine("Part: Find: PartId= {0} , PartName={1}",part.PartId, part.PartName);
static Part FindByStringExpression()
Console.WriteLine("------- Find items using string expression ------");
var predicate = MyDynamics.GetPredicate<Part>("PartId==1444");
var part= parts.Find(predicate);
Console.WriteLine("Part: Find: PartId= {0} , PartName={1}",part.PartId, part.PartName);
public string PartName {get;set;}
public int PartId {get;set;}
public static class MyDynamics
public static Predicate<T> GetPredicate<T>(string stringExpression)
var exp = DynamicExpression.ParseLambda<T, bool>(stringExpression).Compile();
var predicate = new Predicate<T>(exp);