【发布时间】:2014-12-01 18:21:44
【问题描述】:
我想要一种操作类似于以下 LINQ-to-SQL Where 方法的方法。
db.Where(r => r.Age == 42 && r.Name = "Joe");
我想实现:
Something something = Get<Something>()
.FilterBy(x => x.PropOne == 123 && x.PropTwo == 456);
并使用如下方法;能够访问每个表达式参数的 Left.Name、Operator 和 Right.Value 来执行工作。
public static T FilterBy<T>(this T something, Expression<Func<T, object>> e)
{
// do work here
}
到目前为止,我可以在不使用 && 或 || 的情况下解析像 x => x.PropOne == 123 这样的单个条件使用下面的。
public static T FilterBy<T>(this T something, Expression<Func<T, object>> e)
{
BinaryExpression binaryExpression =
(BinaryExpression)((UnaryExpression)e.Body).Operand;
string left = ((MemberExpression)binaryExpression.Left).Member.Name;
string right = binaryExpression
.Right.GetType().GetProperty("Value")
.GetValue(binaryExpression.Right).ToString();
ExpressionType @operator = binaryExpression.NodeType;
return (T)Convert.ChangeType(something, typeof(T));
}
当表达式的一部分与&& 或|| 结合时,如何访问每个表达式参数?
【问题讨论】:
-
问题在哪里?
-
@MarcinJuraszek 我想知道如何从方法中访问每个表达式参数(使用示例实现)。
-
表达式参数?抱歉,还是没看懂。也许其他人会有更多的运气。
-
@MarcinJuraszek 我想分别从
FilterBy<T>()内部访问x.PropOne == 123和x.PropTwo == 456。抱歉,如果仍然不清楚。我想要一个与 LINQ 的 Where 方法类似的方法。 -
@SBPhoenix - 请检查我的编辑是否符合您的问题 - 尝试内联您的 cmets。
标签: c# generics lambda expression func