ListView: невозможно упорядочить по типу 'System.Object' - PullRequest
1 голос
/ 19 июля 2011

Я пытаюсь отсортировать столбец в 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

1 Ответ

1 голос
/ 19 июля 2011

Сравнение не определено для типа Object.Объект может быть чем угодно, как бы вы сравнили два объекта, не зная, кто они?Например, вы не можете сравнить int и строку ... которая больше между 42 и "Hello world"?

Так что вам нужно знать, что вы сравниваете ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...