Если вы знаете тип имущества, которое будете искать, вы можете использовать выражения.
string propName = "Age";
var paramExpression = Expression.Parameter(typeof(Obj1));
// o =>
var memberExpression = Expression.Property(paramExpression, propName);
// o => o.Age
var lambdaExpression = Expression.Lambda<Func<Obj1, string>>(memberExpression, paramExpression);
// (o => o.Age)
var compiled = lambdaExpression.Compile();
IList<Obj1> objTemp = new List<Obj1>();
for (var i = 0; i < 15; i++) {
Obj1 temp = new Obj1();
temp.Name = "Name" + i;
temp.Age = "Age" + i;
temp.Company = "Company" + i;
objTemp.Add(temp);
}
var results = objTemp.Select(compiled);
// equivalent to objTemp.Select(o => o.Age), plus a delegate call and the time to
// compile the lambda.
я бы, вероятно, обернуть это в статическом классе, как это:
static class Gen<TModel, TProp> {
public static Func<TModel, TProp> SelectorExpr(string propertyName) {
var pExpr = Expression.Parameter(typeof (TModel));
var mExpr = Expression.Property(pExpr, propertyName);
var lExpr = Expression.Lambda<Func<TModel, TProp>>(mExpr, pExpr);
return lExpr.Compile();
}
}
Таким образом, вы можете написать селектор, как:
var results = objTemp.Select(Gen<Obj1, string>.SelectorExpr(propName));
Это кажется немного более ясным мне, что я делаю, особенно если я читаю выражение кода DOM, который я написал через 6 месяцев.
Вы можете использовать оператор switch для проверки имени столбца и списка сортировки на основе этого столбца. – Mairaj
Добро пожаловать в переполнение стека! В отличие от форумов, мы не используем «Спасибо», или «Любая помощь оценена», или подписи на [so]. См. «[Должны ли« Привет »,« спасибо », теги и приветствия удалены из сообщений?] (Http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be - спасибо за сообщение). Кстати, это «Спасибо заранее», а не «Спасибо в продвинутом». –