本文介绍了无法将'whereenumerableiterator`1 [object]'类型的对象转换为'system.linq.iqueryable`1 [object]'的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

I'm using some free source code to create an e-commerce site in WebForms. It is the Visual Basic version of Getting Started with ASP.NET 4.5 Web Forms and Visual Studio 2013. I have been successful until I coded the ProductDetails.aspx.vb page. I replaced my object names and properties accordingly, but when I run the project, I get this error:

Unable to cast object of type 'WhereEnumerableIterator`1[LethalLibrary.Book]' to type 'System.Linq.IQueryable`1[LethalLibrary.Book]'.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.InvalidCastException: Unable to cast object of type 'WhereEnumerableIterator`1[LethalLibrary.Book]' to type 'System.Linq.IQueryable`1[LethalLibrary.Book]'.

Does Linq from VS2017 differ from VS2013? How do I fix this?





我的尝试:





What I have tried:

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





我还添加了



I've also added

.Select(Function(p) p)

到我的.Where语句的末尾,但是也没有用。



to the end of my .Where statement, but that hasn't worked, either.

<pre>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))).Select(Function(p) p)
		Else
			query = Nothing
		End If
		Return query
	End Function

推荐答案

Dim query As IQueryable(Of Book) = db.Books.Cast(Of Book)() _
    .Where(Function(x) x.BookID = BookId) _
    .ToList()



或 []:


or Enumerable.OfType(TResult) Method (IEnumerable) (System.Linq)[^]:

Dim query As IQueryable(Of Book) = db.Books.OfType(Of Book)() _
    .Where(Function(x) x.BookID = BookId) _
    .ToList()





有关详细信息,请参阅: []


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


这篇关于无法将'whereenumerableiterator`1 [object]'类型的对象转换为'system.linq.iqueryable`1 [object]'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-27 00:45