c# - 代码 query.Take(() => 1) 做了什么?

标签 c# entity-framework linq

我在维护项目时遇到了以下代码 query.Take(() => 1) .

query类型为 IQueryable<T> .

传递 lambda 与传递 int 有何不同? ?

编辑:编辑以澄清我不是在询问 FirstOrDefault .

最佳答案

这里有几件事要解释。

  1. query.Take(() => 1 ( docs )

    这将返回一个 IQueryable<T>其中可能包含单个项目。它将运行一个使用 SQL Server TOP 的查询语法,这意味着它可以在 SQL Server 2008 及更早版本上运行。

  2. query.Take(1)

    这与之前的版本类似,但它使用更新的 SQL Server OFFSET/FETCH语法,除非您需要传统支持,否则是首选方法。

  3. query.FirstOrDefault()

    这将返回您的实体的单个实例,如果没有匹配项,则返回 null。如果您想要单个项目,这通常是首选方法。不过,您需要检查代码中是否为 null。

将返回一个可枚举的,而 query.FirstOrDefault会给你一个单一的项目,或空。它们运行起来会很不一样

关于c# - 代码 query.Take(() => 1) 做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65090739/

相关文章:

c# - Entity Framework Core 代码优先添加唯一约束

c# - LINQ:WHERE 子句中的 IF 条件不起作用

c# - 折线图 - 更改边框宽度会删除空间

asp.net-mvc - EF4.3 代码优先、MVC、在 POST 操作中附加后延迟加载

c# - 使用 AND 和 OR 运算符评估字符串

c# - Entity Framework 如何管理数据库连接?

c# - 使用 LINQ 连接字符串

c# - 如何在 LINQ 表达式中使用 group 对字段的子字符串进行分组?

c# - 了解使用 Windows native WPF 客户端进行 ADFS 登录

c# - Windows 应用程序的持久内存缓存?