我需要帮助理解与实体框架上下文的第一种方法相关的 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 数据库第一种方法