asf*_*adf 111 .net linq linq-to-entities entity-framework entity-framework-4
我有一个时间的魔鬼找到一个比较查询单个项目的不同方法,以及何时使用每个项目.
有没有人有一个比较所有这些的链接,或快速解释为什么你会使用一个而不是另一个?还有更多我不了解的运营商吗?
谢谢.
Ste*_*ock 198
以下是不同方法的概述:
查找() - 当您想通过主键获取项目时.如果找不到项目,则返回null.它将在进入数据库之前查看上下文(正如Yaron在评论中所指出的那样),如果你需要在相同的上下文存活时多次获得相同的实体,这可能是一个重要的效率因素.
Single() - 当您希望查询返回一个项目时.如果查询不返回一个项,则会抛出异常.
SingleOrDefault() - 当您希望查询返回零个或一个项目时(即您不确定是否存在具有给定键的项目).如果查询未返回零个或一个项,则会抛出异常.
First() - 当您希望查询返回一个或多个项目但您只想访问代码中的第一个项目时(在此查询中排序可能很重要).如果查询不返回至少一个项,则会抛出异常.
FirstOrDefault() - 当您希望查询返回零个或多个项目但您只想访问代码中的第一个项目时(即您不确定是否存在具有给定键的项目)
小智 19
我总是倾向于使用FirstOrDefault
.如果你真的想要表现挑剔,那么你应该FirstOrDefault
在EF中使用.在封面下SingleOrDefault
使用查询中的top(2),因为它需要检查是否存在与条件匹配的第二行,如果存在,则抛出异常.基本上,SingleOrDefault
如果您的查询返回多于1条记录,则表示您要抛出异常.
Ste*_*ven 15
它非常简单:Single
如果没有或多个项目,则返回单个项目并抛出异常.First
将返回第一个项目或在没有项目时抛出.FirstOrDefault
如果没有项目,将返回第一个项目或返回默认值(null
如果给定类型是引用类型).
这是API应该具有的行为.但请注意,底层实现可能有不同的行为.虽然实体框架遵循这一点,但像LLBLGen这样的O/RM也可以null
在调用时返回,First
这是一件非常奇怪的事情.这是设计师IMO的一个非常奇怪(和顽固)的决定.
这四种方法各有所长; 虽然你真的只有两种不同的操作.
xxxxOrDefault()版本只是添加了"我不想将空结果集视为异常情况".
归档时间: |
|
查看次数: |
70810 次 |
最近记录: |