首页 > 解决方案 > 无法将“WhereEnumerableIterator`1[Object]”类型的对象转换为“System.Linq.IQueryable`1[Object]”类型

问题描述

我正在使用一些免费的源代码在 WebForms 中创建一个电子商务网站。它是ASP.NET 4.5 Web 窗体和 Visual Studio 2013 入门的 Visual Basic 版本。在编写 ProductDetails.aspx.vb 页面之前,我一直是成功的。我相应地替换了我的对象名称和属性,但是当我运行项目时,我收到了这个错误:

无法转换类型为“WhereEnumerableIterator 1[LethalLibrary.Book]' to type 'System.Linq.IQueryable1 [LethalLibrary.Book]”的对象。

说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息: System.InvalidCastException:无法转换类型为“WhereEnumerableIterator 1[LethalLibrary.Book]' to type 'System.Linq.IQueryable1[LethalLibrary.Book]”的对象。

VS2017 中的 Linq 与 VS2013 有什么不同吗?我该如何解决?

Public Function GetBook(<QueryString("BookID")> BookId As Nullable(Of Integer)) As IQueryable(Of Book)
    Dim db = New BookContext()
    Dim query As IQueryable(Of Book) = db.Books
    If BookId.HasValue AndAlso BookId > 0 Then
        query = query.Where(CType(Function(p) p.BookID = BookId, Func(Of Book, Boolean)))
    ElseIf Not String.IsNullOrEmpty(BookTitle) Then
        query = query.Where(Function(p) String.Compare(p.BookTitle, BookTitle) = 0)
    Else
        query = Nothing
    End If
    Return query
End Function

标签: asp.netvb.netlinqwebforms

解决方案


我在 ASP.NET 的论坛上找到了答案。添加AsQueryable()到我的query变量中修复了它!

Public Function GetBook(BookId As Nullable(Of Integer)) As IQueryable(Of Book)
    Dim BookTitle As String = "aaaa"
    Dim db = New ApplicationDbContext()
    Dim query As IQueryable(Of Book) = db.Books
    If BookId.HasValue AndAlso BookId > 0 Then
        query = (query.Where(CType(Function(p) p.BookId = BookId, Func(Of Book, Boolean)))).AsQueryable()
    ElseIf Not String.IsNullOrEmpty(BookTitle) Then
        query = (query.Where(Function(p) String.Compare(p.BookTitle, BookTitle) = 0)).AsQueryable()
    Else
        query = Nothing
    End If
    Return query
End Function

推荐阅读