Итак, я искал простой пример, надеюсь, простой проблемы.
У меня есть простой объект Список ListTest (Список)
public class ListTest{
{
public string perName { get; set; }
public string perSex { get; set; }
public ListTest(string pName, string pSex)
{
this.perSex = pSex;
this.perName = pName;
}
}
Я загрузил его с некоторыми данными:
List<ListTest> tryIt = new List<ListTest>();
tryIt.Add(new ListTest("Karen", "F"));
tryIt.Add(new ListTest("Kate", "F"));
tryIt.Add(new ListTest("Glen", "M"));
tryIt.Add(new ListTest("Tiger", "M"));
tryIt.Add(new ListTest("Clementine", "F"));
tryIt.Add(new ListTest("Magnolia", "F"));
Теперь я хочу запросить его, используя лямбда-выражение:
var things = tryIt
.Where(sex => (sex.perSex == "F"))
.OrderBy(sex => sex.perName);
Но я хочу сделать это динамически, на тот случай, если я захочу изменить свое местоположение на «perName».
Я могу создать лямбда-выражение для ваших выражений, но не могу понять, как перенести его через линию ворот, назначить его предложению where и выполнить его.
IQueryable<ListTest> iq = tryIt.AsQueryable();
ParameterExpression pe = Expression.Parameter(typeof(ListTest), "Person");
Expression paEx = Expression.Property(pe, "perSex");
Expression right = Expression.Constant("F");
Expression eqEx = Expression.Equal(paEx, right);
Expression lE = Expression.Lambda<Func<ListTest, bool>>(eqEx, pe);
Это должно быть простое решение из 4 или 5 строк, но я не могу найти пример легко дешифруемого решения.
Должен ли я использовать MethodCallExpression или что-то в этом роде?
Спасибо