У меня есть список выражений Linq List<Expression>
, где каждый тип выражения (тип, который будет возвращать выражение) имеет значение Item
или Item[]
.
Я пытаюсь написать код, который будет принимать упомянутую коллекцию в качестве входного параметра и создавать выражение Linq, которое будет возвращать один список (или массив) элементов (Item[]
).
Вот абстрактный пример:
public static string[] GetStrings()
{
return new[]
{
"first",
"second",
"third"
};
}
public static string GetString()
{
return "single1";
}
private void SOExample()
{
var expressions = new List<Expression>
{
Expression.Call(GetType().GetMethod("GetString")),
Expression.Call(GetType().GetMethod("GetStrings")),
Expression.Call(GetType().GetMethod("GetString")),
Expression.Call(GetType().GetMethod("GetStrings"))
};
// some magic code here
var combined = SomeMagicHere(expressions);
}
private Expression SomeMagicHere(List<Expression> expressions)
{
foreach (var expression in expressions)
{
if (expression.Type.IsArray)
{
// Use array's elements
}
else
{
// Use expression
}
}
То, что я пытаюсь сделать, это создать одно выражение, которое вернет список Item
(строки в моем примере) из предоставленного списка.
LambdaExpression
. Есть ли конкретная причина, по которой здесь используетсяExpression
, а не... ну, может быть, просто отражение, может быть, делегаты и т. д.Expression
здесь не кажется очевидным выбором. Также: что вы ищете в результате: вы хотите, чтобы он оценивал методы, объединяя их результаты? или построитьExpression
, который при компиляции и т. д. будет оценивать дерево? или...? в основном: как бы выглядел ваш идеальный результат здесь? Также: что является целевым абонентом? (важно: абонентам ORM это не понравится) - person Marc Gravell   schedule 08.10.2012