Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取Linq.Expression';一元表达式中的s体#_C#_.net_Linq_Lambda - Fatal编程技术网

C# 获取Linq.Expression';一元表达式中的s体#

C# 获取Linq.Expression';一元表达式中的s体#,c#,.net,linq,lambda,C#,.net,Linq,Lambda,我想通过添加到现有表达式来扩展和。 所以逻辑上我想要exp3: exp1 = o => (((o.AuditDateTime > 10/04/2018 00:00:00) && (o.AuditDateTime < 18/04/2018 00:00:00))) exp2 = o => (o.EventType == "X") exp3 = o => (((o.AuditDateTime > 10/04/2018 00:00:00) &&

我想通过添加到现有表达式来扩展和。 所以逻辑上我想要exp3:

exp1 = o => (((o.AuditDateTime > 10/04/2018 00:00:00) && (o.AuditDateTime < 18/04/2018 00:00:00)))
exp2 = o => (o.EventType == "X")
exp3 = o => (((o.AuditDateTime > 10/04/2018 00:00:00) && (o.AuditDateTime < 18/04/2018 00:00:00))) && (o.EventType == "X")
exp1=o=>((o.AuditDateTime>10/04/2018 00:00:00)和&(o.AuditDateTime<18/04/2018 00:00:00)))
exp2=o=>(o.EventType==“X”)
exp3=o=>((o.AuditDateTime>10/04/2018 00:00:00)和&(o.AuditDateTime<18/04/2018 00:00:00))&&(o.EventType==“X”)
我有一个IQueryable实例,其中已经定义了where表达式,类似于:

{AuditJournalEntity[].Where(o => (((o.AuditDateTime > 10/04/2018 00:00:00) AndAlso (o.AuditDateTime < 18/04/2018 00:00:00))))}
{AuditJournalEntity[]其中(o=>((o.AuditDateTime>10/04/2018 00:00:00)和(o.AuditDateTime<18/04/2018 00:00:00)))
因此,我可以使用Arguments数组(Arguments[1])获取实际的where表达式:

{o=>((o.AuditDateTime>10/04/2018 00:00:00)和(o.AuditDateTime<18/04/2018 00:00:00)))
但是,我不知道如何获取UnaryExpression的表达式体部分,以便稍后添加到其中。 我想要的是这部分:

(((o.AuditDateTime > 10/04/2018 00:00:00) AndAlso (o.AuditDateTime < 18/04/2018 00:00:00)))
((o.AuditDateTime>10/04/2018 00:00:00)和(o.AuditDateTime<18/04/2018 00:00:00)))
如果在debug中,它可以使用一些UnaryExpressionProxy实例来提供这个部分,但是它是一个私有成员,我想它不能真正使用它。 如果您需要更多信息,请告诉我。

您可以使用该属性

在您的场景中,我猜您希望得到谓词lambda表达式。对于
IQueryable
源,它通过方法包装在
UnaryExpression
中。所以你可以用这样的方法:

static LambdaExpression ExtractLambda(Expression source)
{
    while (source != null && source.NodeType == ExpressionType.Quote)
        source = ((UnaryExpression)source).Operand;
    return source as LambdaExpression;
}
然后,您可以使用属性获取主体。

非常有助于使用它的
Dump
方法来检查
Expression
对象并查看其属性。具有用于查询的方法。另一种方法见我的答案。
static LambdaExpression ExtractLambda(Expression source)
{
    while (source != null && source.NodeType == ExpressionType.Quote)
        source = ((UnaryExpression)source).Operand;
    return source as LambdaExpression;
}