using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
public class Test
{
public static void Main()
{
var parameter = Expression.Parameter(typeof(Answer), "a");
var answers = new List<Answer>
{
new Answer { Property1 = "foo", Property2 = "bar" },
new Answer { Property1 = "foo", Property2 = "baz" },
};
for (var i = 1; i <= 2; ++i) {
var propertyValue = Expression.MakeMemberAccess(parameter, typeof(Answer).GetProperty("Property" + i));
var predicate = Expression.Equal(propertyValue, Expression.Constant("foo"));
var lambda = (Func<Answer, bool>)Expression.Lambda(predicate, parameter).Compile();
Console.WriteLine("Searching Property" + i + " for the value 'foo':");
foreach (var a in answers.Where(lambda)) {
Console.WriteLine(a);
}
}
}
}
class Answer {
public string Property1 { get; set; }
public string Property2 { get; set; }
public override string ToString() {
return string.Format("{0} {1}", Property1, Property2);
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5MaW5xLkV4cHJlc3Npb25zOwoKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJCXZhciBwYXJhbWV0ZXIgPSBFeHByZXNzaW9uLlBhcmFtZXRlcih0eXBlb2YoQW5zd2VyKSwgImEiKTsKCQoJCXZhciBhbnN3ZXJzID0gbmV3IExpc3Q8QW5zd2VyPgoJCXsKCQkJbmV3IEFuc3dlciB7IFByb3BlcnR5MSA9ICJmb28iLCBQcm9wZXJ0eTIgPSAiYmFyIiB9LAoJCQluZXcgQW5zd2VyIHsgUHJvcGVydHkxID0gImZvbyIsIFByb3BlcnR5MiA9ICJiYXoiIH0sCgkJfTsKCQoJCWZvciAodmFyIGkgPSAxOyBpIDw9IDI7ICsraSkgewoJCQl2YXIgcHJvcGVydHlWYWx1ZSA9IEV4cHJlc3Npb24uTWFrZU1lbWJlckFjY2VzcyhwYXJhbWV0ZXIsIHR5cGVvZihBbnN3ZXIpLkdldFByb3BlcnR5KCJQcm9wZXJ0eSIgKyBpKSk7CgkJCXZhciBwcmVkaWNhdGUgPSBFeHByZXNzaW9uLkVxdWFsKHByb3BlcnR5VmFsdWUsIEV4cHJlc3Npb24uQ29uc3RhbnQoImZvbyIpKTsKCQkJdmFyIGxhbWJkYSA9IChGdW5jPEFuc3dlciwgYm9vbD4pRXhwcmVzc2lvbi5MYW1iZGEocHJlZGljYXRlLCBwYXJhbWV0ZXIpLkNvbXBpbGUoKTsKCgkJCUNvbnNvbGUuV3JpdGVMaW5lKCJTZWFyY2hpbmcgUHJvcGVydHkiICsgaSArICIgZm9yIHRoZSB2YWx1ZSAnZm9vJzoiKTsKCQkJZm9yZWFjaCAodmFyIGEgaW4gYW5zd2Vycy5XaGVyZShsYW1iZGEpKSB7CgkJCQlDb25zb2xlLldyaXRlTGluZShhKTsKCQkJfQoJCX0JCgl9Cn0KCmNsYXNzIEFuc3dlciB7CiAgICBwdWJsaWMgc3RyaW5nIFByb3BlcnR5MSB7IGdldDsgc2V0OyB9CglwdWJsaWMgc3RyaW5nIFByb3BlcnR5MiB7IGdldDsgc2V0OyB9CgkKCXB1YmxpYyBvdmVycmlkZSBzdHJpbmcgVG9TdHJpbmcoKSB7CgkJcmV0dXJuIHN0cmluZy5Gb3JtYXQoInswfSB7MX0iLCBQcm9wZXJ0eTEsIFByb3BlcnR5Mik7Cgl9Cn0=