[ad_1]
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?
ما حاولت:
VB
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
لقد أضفت أيضا
VB
.Select(Function(p) p)
إلى نهاية بيان .Where الخاص بي، لكن ذلك لم ينجح أيضًا.
VB
<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
الحل 1
حاول استخدام طريقة Enumerable.Cast(TResult) (IEnumerable) (System.Linq)[^] :
VB.NET
Dim query As IQueryable(Of Book) = db.Books.Cast(Of Book)() _ .Where(Function(x) x.BookID = BookId) _ .ToList()
أو أسلوب Enumerable.OfType(TResult) (IEnumerable) (System.Linq)[^]:
VB.NET
Dim query As IQueryable(Of Book) = db.Books.OfType(Of Book)() _ .Where(Function(x) x.BookID = BookId) _ .ToList()
لمزيد من التفاصيل، يرجى الاطلاع على: طرق LINQ المدعومة وغير المدعومة (LINQ للكيانات) | مستندات مايكروسوفت[^]
الحل 2
لقد وجدت الحل في منتديات ASP.NET؛ أضفت AsQueryable()
إلى نهاية بلدي query
متغير وعملت!
VB
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
الحل 3
عملت AsQueryable بالنسبة لي أيضًا (في cSharp)
شكرًا لك
[ad_2]
コメント