我需要帮助理解与实体框架上下文的第一种方法相关的 C# 语法 [重复]

Posted

技术标签:

【中文标题】我需要帮助理解与实体框架上下文的第一种方法相关的 C# 语法 [重复]【英文标题】:I need help understanding the C# Syntax related to the First method of an Entity Framework context [duplicate] 【发布时间】:2013-01-11 11:59:47 【问题描述】:

我是 Entity Framework 的新手,虽然我已经掌握了基础知识,但我在一个我不理解的特定语法上磕磕绊绊。该代码有效,但它对我来说有点像“黑匣子”,我不理解它而感到有点受阻。

我在我的类中声明了一个局部私有变量:

private clientexperienceEntities ceContext;

在我的代码中,我将它实例化:

ceContext = new clientexperienceEntities();

下一行是我遇到困难的部分:

var client = ceContext.clients.First(a => a.ID == _ID);

具体到First方法的参数,a => a.ID == _ID到底是什么意思?我知道它告诉上下文根据_ID 值中包含的主键值查找第一个匹配记录。但我不明白“a”是从哪里来的,或者我想使用的任何其他名称,“b”或“cat”。

这个语法是 Linq 的一部分吗?我什至不确定要搜索什么才能理解它。

正如我所说,该语句有效,并且我可以操作返回的实体,但我只是不完全理解该参数构造。

【问题讨论】:

【参考方案1】:

您应该了解更多关于lambda expression

Lambda 表达式是 C# 3.0 语言引入的内联委托。这是一种表示匿名方法的简洁方式。

要创建 lambda 表达式,请在 lambda 运算符 => 的左侧指定输入参数(如果有),并将表达式或语句块放在另一侧。在这种情况下:a => a.ID == _ID 指定名为 a 的 ClientExperience 参数类型,如果 a.ID 等于 _ID,则返回 true。

【讨论】:

太棒了!谢谢!至少现在我知道去哪里找了。快速浏览一下,它似乎是构建表达式树的捷径。我以前没有深入研究过。感谢您的反馈和指点。【参考方案2】:

我发现如果我自己讲述这个表达方式会很有帮助。如果我要写或读那行,听起来像这样:

var client 是 ceContext 中的第一个客户端,它是等式的结果 (a WHERE a.ID EQUALS _ID);

是的,您可以为 Lambda 变量使用任何名称。这就像写一个数学表达式。您可以求解 x、a、y、xxx、cat 或其他任何问题。

【讨论】:

在过去的几个小时里,我学到了很多关于 Lambda 的知识,谢谢!说出来确实有帮助。【参考方案3】:

a => a.ID == _ID 究竟是什么意思?

它是一个 labmda 表达式,用作过滤器。

这是相同的 - 对于没有阅读文档的人来说更清楚:

clients.Where(x => x.ID == _ID).First ();

该表达式将对象 X(即查询中的每个对象)上的字段 ID (x.ID) 与 _ID 的值(必须是局部变量,命名会表明这一点)进行比较。

这是一个过滤器。获取我的第一项,其中字段 ID 是变量 ID 的值。

这里需要阅读 Lambda 表达式 - 如果不了解它们,您将不会走得太远。

【讨论】:

这很有意义,感谢您和其他人帮助我识别技术方面(lambda 表达式)并帮助理解我在看什么。

以上是关于我需要帮助理解与实体框架上下文的第一种方法相关的 C# 语法 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

带有数据库的 Azure 函数连接字符串 使用实体框架的第一种方法

是否需要处理实体框架上下文对象

应用程序中断访问 dbcontext、Asp .net 核心 web api 2.0 与实体框架核心 2.0 数据库第一种方法

使用实体框架映射数据库的方法?

实体框架分离实体和相关实体消失

实体框架长期数据上下文与短期数据上下文 [关闭]