Если вы говорите исключительно о LINQ to Objects, здесь нет необходимости в Expression
s, поскольку аргументом Enumerable.OrderBy
является Func
делегат:
var list = new List<SampleClass> ();
Func<SampleClass, PropertyType1) orderSelector1 = (obj => obj.Property1); // parentheses for clarity
var sequence1 = list.OrderBy (orderSelector1);
Func<SampleClass, PropertyType2) orderSelector1 = (obj => obj.Property2);
var sequence2 = list.OrderBy (orderSelector2);
Если вы хотите назначитьнесколько раз вы можете сделать Func
return object
:
var list = new List<SampleClass> ();
Func<SampleClass, object> orderSelector;
orderSelector = (obj => obj.Property1);
var sequence1 = list.OrderBy (orderSelector);
orderSelector = (obj => obj.Property2);
var sequence2 = list.OrderBy (orderSelector);
Если вы действительно хотите динамический выбор свойства, то есть вызов OrderBy
со свойством, указанным string
вам понадобится Expression
с.В этой теме есть множество примеров, которые позволяют вам сделать что-то вроде:
var list = new List<SampleClass> ();
var sequence1 = list.OrderBy ("Property1");
var sequence2 = list.OrderBy ("Property2");