1

我是 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 的一部分吗?我什至不确定要搜索什么才能理解它。

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

4

3 回答 3

5

您应该了解有关lambda 表达式的更多信息

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

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

于 2013-01-28T07:11:37.207 回答
2

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

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

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

于 2013-01-28T07:16:44.757 回答
1

a => a.ID == _ID 到底是什么意思?

它是一个 labmda 表达式并充当过滤器。

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

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

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

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

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

于 2013-01-28T07:15:24.820 回答