Следующая ссылка содержит информацию о динамических запросах linq. Возможно, размышления над их DLL могут помочь.
http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx
В конечном итоге вам потребуется использовать статические фабричные методы в System.Linq.Expressions.Expression для построения выражения.
Я делаю 2 предположения здесь:
- Вы действительно хотите строку s = m.A + m.B
- A и B оба являются свойствами, а не полями
Вот тестовый класс, иллюстрирующий мой пример:
public class TestClass
{
public string A { get; set; }
public string B { get; set; }
}
Вот статический класс и метод, который будет создавать лямбда-выражение, преобразовывать его в Expression >, а затем компилировать его в Func , который вы можете запускать так же, как любой вызов метода.
public static class TestHelper
{
public static string GetString()
{
var testObject = new TestClass { A = "Hey", B = "Man" }; //Replace TestClass
var type = testObject.GetType();
var parameter = Expression.Parameter(type, "m");
var property1 = Expression.Property(parameter, "A");
var property2 = Expression.Property(parameter, "B");
MethodInfo mi = typeof(string).GetMethod("Concat", new Type[] { typeof(string), typeof(string) });
var concat = Expression.Call(mi, property1, property2);
var lambda = Expression.Lambda<Func<TestClass, string>>(concat, parameter); //Replace TestClass
var newFunction = lambda.Compile();
string s = newFunction(testObject); //Replace TestClass
}
}