Dynamic Linq - установка порядка по типу выражения во время выполнения - PullRequest
2 голосов
/ 05 июня 2009

Я использую динамический Linq и у меня работают предложения where. Сейчас я ищу, чтобы добавить предложения orderby, но у меня проблема с возможностью установить тип динамического выражения. Ниже рабочий код, который у меня есть:

class MyClass {
    public string Owner;
    public DateTime Inserted;
}

Expression<Func<MyClass, bool>> whereExpression = DynamicExpression.ParseLambda<MyClass, bool>("owner = \"joe\"");
Expression<Func<MyClass, DateTime>> orderExpression = DynamicExpression.ParseLambda<MyClass, DateTime>("inserted");
var result = from item in table.Where(whereExpression).OrderBy(orderExpression) select item;
result.ToList().ForEach(m => Console.WriteLine("inserted=" + m.Inserted + "."));

Поскольку мне нужно использовать разные свойства в выражении orderby, я хотел бы использовать что-то вроде приведенного ниже кода, который не работает.

Expression<Func<MyClass, bool>> whereExpression = DynamicExpression.ParseLambda<MyClass, bool>("owner = \"joe\"");
Type orderType = typeof(DateTime);
Expression<Func<MyClass, orderType>> orderExpression = DynamicExpression.ParseLambda<MyClass, orderType>("inserted");
var result = from item in table.Where(whereExpression).OrderBy(orderExpression) select item;
result.ToList().ForEach(m => Console.WriteLine("inserted=" + m.Inserted + "."));

Компилятор недоволен строкой, разделяющей выражение orderExpression. Есть ли способ установить тип Func во время выполнения?

Ответы [ 2 ]

3 голосов
/ 05 июня 2009

Похоже, что динамические методы расширения Linq позаботятся обо мне. Я делал это слишком сложно.

var result = from item in table.Where("owner = \"joe\"").OrderBy("inserted") select item;
result.ToList().ForEach(m => Console.WriteLine("inserted=" + m.Inserted + "."));
0 голосов
/ 29 октября 2009

Да - хотя одна проблема в том, что DynamicLinq не позволит вам сортировать с помощью IComparer. У меня есть решение к этому.

...