EF如何实现SingleOrDefault

时间:2014-01-05 19:09:59

标签: linq entity-framework linq-to-sql

我读到LINQ to SQL没有有效地实现SingleOrDefault(看看Damien的评论)。 LINQ到EF也是如此吗?

我想要一些只选择最多两条记录的东西(因为两条记录已经打破了单一规则),沿着以下几行:

Function SingleOrDefault(source As IQueryable(Of T)) As T
    Dim candidates = source.Take(2).ToList()

    If candidates.Count = 2 Then
       Throw
    ElseIf candidates.Count = 1 Then
       Return candidates(0)
    Else
       Return Nothing
    End If
End Function

1 个答案:

答案 0 :(得分:5)

EF为单一默认生成的SQL是:

 SELECT TOP 2 ....

如果有2条记录返回,则抛出异常。只有一次数据库之旅。

您可以通过运行SQL事件探查器来检查它。