【问题标题】:How to understand expressions as method parameters in C# [duplicate]如何将表达式理解为 C# 中的方法参数 [重复]
【发布时间】:2020-02-01 21:59:14
【问题描述】:

我开始越来越多地看到像下面这样的方法,但这是一个我不完全理解的概念。

    public virtual Task<List<T>> GetAsync(Expression<Func<T, bool>> exp)
    {
        using (var conn = _factory.OpenDbConnection())
        {
            return conn.SelectAsync(exp);
        }
    }

有人可以帮我翻译一个表达式的方法参数吗?就像解释它与标准实例参数有何不同?

【问题讨论】:

  • 你熟悉db.SomeTable.Where(r =&gt; r.Value == 42)吗?

标签: c# .net .net-core


【解决方案1】:

这些被称为Expression Trees (https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/expression-trees/)。

基本上它是一个lamdba 可以翻译到另一个平台,从它的外观来看,你的情况是某种数据库。这个function 将(由库)翻译成SQL,然后在数据库中执行。

在您的程序代码中,您通常只需要lambdas (Func&lt;&gt;),但在某些情况下您需要Expression Tree。除了您的示例之外,有时您还需要一个动态构造的函数,可以使用这些函数来完成。

关于lambdas的一般信息可以在这里找到:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/lambda-expressions

【讨论】:

    猜你喜欢
    • 2019-09-09
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    • 2012-12-27
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多