我读到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
答案 0 :(得分:5)
EF为单一默认生成的SQL是:
SELECT TOP 2 ....
如果有2条记录返回,则抛出异常。只有一次数据库之旅。
您可以通过运行SQL事件探查器来检查它。