Я пытаюсь отсортировать столбец в ListView, используя лямбда-выражение, но когда я пытаюсь связать результат с представлением списка, я получаю эту ошибку.
Вот код, который я пытаюсь использовать.
Private Sub BindCategories(Optional ByVal SortColumn As String = Nothing, Optional ByVal SortOrder As SortDirection = SortDirection.Ascending)
Dim DS As IQueryable(Of DataEntities.Category) = DataEntities.Category.GetAllItems
If Not String.IsNullOrEmpty(SortColumn) Then
DS = Sort(Of DataEntities.Category)(DS.AsEnumerable, SortColumn, SortDirection.Ascending).AsQueryable
End If
lstCategories.DataSource = DS
lstCategories.DataBind()
End Sub
и вот код для функции Sort
.
Private Function Sort(Of T)(ByVal src As IEnumerable(Of T), ByVal columnName As String, ByVal orderby As SortDirection) As IEnumerable(Of T)
Dim param = Expression.Parameter(GetType(T), "item")
Dim sortExpression = Expression.Lambda(Of Func(Of T, Object))(Expression.Convert(Expression.[Property](param, columnName), GetType(Object)), param)
Select Case orderby
Case WebControls.SortDirection.Ascending
Return src.AsQueryable().OrderBy(sortExpression)
Case Else
Return src.AsQueryable().OrderByDescending(sortExpression)
End Select
End Function
Страница ошибки показывает, что ошибка произошла в lstCategories.DataBind()
Ошибка источника:
Line 15: End If
Line 16: lstCategories.DataSource = DS
Line 17: lstCategories.DataBind() << **Error occurs at the point.**
Line 18: End Sub
Line 19:
Трассировка стека
[InvalidOperationException: невозможно упорядочить по типу 'System.Object'.]
System.Data.Linq.SqlClient.QueryConverter.VisitOrderBy (Expression
последовательность, выражение LambdaExpression, SqlOrderType orderType) +908326
System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall (MethodCallExpression
mc) + 8217
System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall (MethodCallExpression
mc) + 74
System.Data.Linq.SqlClient.QueryConverter.VisitInner (узел выражения)
+ 1003
System.Data.Linq.SqlClient.QueryConverter.ConvertOuter (Expression
узел) + 79
System.Data.Linq.SqlClient.SqlProvider.BuildQuery (запрос выражения,
SqlNodeAnnotations аннотации) + 114
System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute (Expression
запрос) + 132
System.Data.Linq.DataQuery 1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
+35 System.Collections.Generic.List
1..ctor (IEnumerable 1
collection) +7667686 System.Linq.Enumerable.ToList(IEnumerable
1
источник) + 61
System.Data.Linq.Provider.BindingList.Create (контекст DataContext,
IEnumerable 1 sequence) +53<br>
System.Data.Linq.DataQuery
1.GetNewBindingList () + 51
System.Data.Linq.DataQuery`1.System.ComponentModel.IListSource.GetList ()
+15 System.Web.UI.DataSourceHelper.GetResolvedDataSource (Object
dataSource, String dataMember) + 50
System.Web.UI.WebControls.ReadOnlyDataSource.System.Web.UI.IDataSource.GetView (String
viewName) + 41
System.Web.UI.WebControls.DataBoundControl.ConnectToDataSourceView ()
+128 System.Web.UI.WebControls.DataBoundControl.GetData () + 4
System.Web.UI.WebControls.DataBoundControl.PerformSelect () + 60
System.Web.UI.WebControls.ListView.PerformSelect () + 57
System.Web.UI.WebControls.BaseDataBoundControl.DataBind () + 73
Admin_Categories.BindCategories (String SortColumn, SortDirection
SortOrder) в F: \ Work \ Under
Развитие \ Сайты \ улыбка \ Улыбайтесь-Deploy \ Admin \ Categories.aspx.vb: 17
Admin_Categories.lstCategories_Sorting (Отправитель объекта,
ListViewSortEventArgs e) в F: \ Work \ Under
Развитие \ Сайты \ улыбка \ Улыбайтесь-Deploy \ Admin \ Categories.aspx.vb: 65
System.Web.UI.WebControls.ListView.OnSorting (ListViewSortEventArgs e)
+110 System.Web.UI.WebControls.ListView.HandleSort (String
sortExpression, SortDirection sortDirection) + 57
System.Web.UI.WebControls.ListView.HandleSort (String sortExpression)
+52 System.Web.UI.WebControls.ListView.HandleEvent (EventArgs e,
Логические причиныВалидация, Строка проверкиГруппа) + 268
System.Web.UI.WebControls.ListView.OnBubbleEvent (Источник объекта,
EventArgs e) +233 System.Web.UI.Control.RaiseBubbleEvent (Object
источник, EventArgs args) + 37
System.Web.UI.WebControls.LinkButton.OnCommand (CommandEventArgs e)
+118 System.Web.UI.WebControls.LinkButton.RaisePostBackEvent (String
eventArgument) + 135
System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent (String
eventArgument) + 10
System.Web.UI.Page.RaisePostBackEvent (IPostBackEventHandler
sourceControl, String eventArgument) + 13
System.Web.UI.Page.RaisePostBackEvent (NameValueCollection postData)
+175 System.Web.UI.Page.ProcessRequestMain (Boolean
includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
+ 1565