Dav*_*key 2 vb.net asp.net linq-to-entities entity-framework
我有以下查询:
Dim roommates = From p In dbroom.Residents _
Where p.room = queryStudent.First.r.id _
Where p.building = queryStudent.First.b.id _
Where p.year = year _
Where p.semester = term _
Select p.person_name
Run Code Online (Sandbox Code Playgroud)
目前它没有返回任何结果。当我尝试将此结果集(因为它是空的)绑定到 ASP.NET 中的转发器时遇到错误,因此我尝试转义它:
If roommates.Count() = 0 Then
Dim nomates As String = "No current roommates."
rptrRoommates.DataSource = nomates
rptrRoommates.DataBind()
Else
rptrRoommates.DataSource = roommates
rptrRoommates.DataBind()
End If
Run Code Online (Sandbox Code Playgroud)
但我仍然遇到同样的错误:
方法“First”只能用作最终查询操作。请考虑在此实例中使用“FirstOrDefault”方法。
在 LINQ to Entities 查询中,可以使用 FirstOrDefault() 或 SingleOrDefault 作为最终查询操作。
var right = Context.Foos
.Where(f => f.SomeBoolean)
.FirstOrDefault(); // works
var works = Context.Foos
.Where(f => f.SomeBoolean)
.SingleOrDefault(); // works
Run Code Online (Sandbox Code Playgroud)
但是,在查询内部,您不能使用 SingleOrDefault:
var wrong = Context.Foos
.Where(f => f.SomeBoolean)
.Select(f => f.Bars.SingleOrDefault())
.SingleOrDefault(); // Runtime error
var right = Context.Foos
.Where(f => f.SomeBoolean)
.Select(f => f.Bars.FirstOrDefault())
.SingleOrDefault(); // works
Run Code Online (Sandbox Code Playgroud)
请注意,最终的 SingleOrDefault 总是可以的,但我们必须将查询中的那个更改为 FirstOrDefault。其原因在于 SingleOrDefault 的实现方式。它告诉数据库服务器返回前两条记录,如果返回多条记录,则抛出异常。LINQ to Entities 查询(直到最终 SingleOrDefault 之前的所有查询)都将转换为 SQL。该错误行为无法直接用纯 SQL 查询来表达。
参考:这里
| 归档时间: |
|
| 查看次数: |
10782 次 |
| 最近记录: |