【发布时间】:2012-10-08 10:36:33
【问题描述】:
我有一个 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 调用者不会喜欢这样)
标签: c# linq lambda expression linq-expressions