如何将表达式理解为 C# 中的方法参数 [重复]
Posted
技术标签:
【中文标题】如何将表达式理解为 C# 中的方法参数 [重复]【英文标题】:How to understand expressions as method parameters in C# [duplicate] 【发布时间】: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 => r.Value == 42)
吗?
【参考方案1】:
这些被称为Expression Trees
(https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/expression-trees/)。
基本上它是一个lamdba
可以翻译到另一个平台,从它的外观来看,你的情况是某种数据库。这个function
将(由库)翻译成SQL
,然后在数据库中执行。
在您的程序代码中,您通常只需要lambdas
(Func<>
),但在某些情况下您需要Expression Tree
。除了您的示例之外,有时您还需要一个动态构造的函数,可以使用这些函数来完成。
关于lambdas
的一般信息可以在这里找到:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/lambda-expressions
【讨论】:
以上是关于如何将表达式理解为 C# 中的方法参数 [重复]的主要内容,如果未能解决你的问题,请参考以下文章