簡體   English   中英

是否可以使用C#lambda表達式在編譯時創建System.Linq.Expressions.Expression的實例?

[英]Is it possible to use a C# lambda expression to create an instance of System.Linq.Expressions.Expression at compile time?

代碼中的AC#lambda表達式(類型為System.Linq.Expressions.Expression<TDelegate> ):

Expression<Func<Something, bool>> predicate = s => s.SomeProperty == 12;

要創建System.Linq.Expressions.Expression的類似實例:

var parameter = Expression.Parameter(typeof(Something), "s");
var property = Expression.Property(parameter, typeof(Something).GetProperty("SomeProperty"));
var constant = Expression.Constant(12);
var expression = Expression.Equal(property, constant);

有沒有辦法聲明只給出predicate expression 因此,無需在代碼中逐步構建表達式樹,而是讓編譯器從lambda表達式推斷它。

var expression = Expression.FromLambda<Something>(s => s.SomeProperty == 12);

只需返回表達式

Expression<Func<T, bool>> FromLambda<T>(Expression<Func<T, bool>> lambda) {
    return lambda;
}

並根據需要使用

var expression = FromLambda<Something>(s => s.SomeProperty == 12);

然而,這不是非常靈活,僅針對這種情況。 您需要為要使用的任何其他委托創建方法。

當然,只需抓住lambda表達式的主體,如下所示:

Expression FromLambda(Expression<Func<Something, bool>> lambda)
{
  return lambda.Body;
}

然后你可以像這樣使用它:

var expression = FromLambda(s => s.SomeProperty == 12);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM