Приведение отсортированного списка обратно в IEnumerable не возвращает никакого результата - PullRequest
0 голосов
/ 17 марта 2019

У меня есть код, который мне нужно отсортировать по возрастанию перед привязкой.Это вызывается из другого элемента управления, у которого определен тип автомобилей и который связан со свойством Searcher в этом общем элементе управления.Итак, здесь я попытался преобразовать его в список, чтобы отсортировать его, счетчик становится равным 0. Поэтому я не уверен, как отсортировать его по параметру типа автомобилей перед привязкой к сетке.

IEnumerable cars = this.Searcher.Search(_enteredText);  //cars count 70

var carBL = Generics.CreateGeneric<IBindingList>(typeof(IMBindingList<>), 
     cars.GetType().GetGenericArguments()[0]);          

grdResults.DataSource = carBL ;

Мой код пытается отсортировать результаты, которые не работают.автомобили возвращают счет 70 после поиска.

var orderedcars = cars.ToEnumerable().ToList().OrderBy(x = ?) ; 

Счетчик carBL равен 0. Я неправильно что-то делаю при сортировке и следующей строке.Я думаю, что мне нужно использовать ApplySort, но я не уверен, каким должен быть дескриптор свойства.

Код для поиска (текст)

       public virtual IEnumerable<T> Search(string filter)
       {
            List<T> somelist = new List<T>(); ;
            if (lastsomelist  != null && this.Searchsomelist)
            {
                somelist = this.SearchtheList(lastsomelist  , filter);
            }
            else
            {
                somelist= this.SearchtheList(this.commoncontrol, filter);
                if ((somelist.Count == 0 )
                    somelist.AddRange(this.SearchtheList(this.multiSearchtheList, filter));
            }
            if (somelist!= null && somelist.Count > 0)
                lastsomelist  = somelist;
            else
                lastsomelist  = null;

            return somelist;

       }

Ответы [ 3 ]

1 голос
/ 17 марта 2019

Прежде всего orderedcars.AsEnumerable(); здесь не нужен.Предложение OrderBy(x => x.Name); возвращает IOrderedEnumerable<TElement>, которое, в свою очередь, происходит от IEnumerable<TElement>, так что вы можете напрямую передать orderedcars в LoadallMacthingInventory метод, такой как abc.LoadallMacthingInventory(orderedcars);.Следовательно, наблюдение orderedcars.AsEnumerable(), не дающее результата, не является следствием AsEnumerable().Вместо этого вы должны посмотреть, будет ли cars.Cast<ModelClass>().ToList().OrderBy(x => x.Name).Count(); больше нуля.Если оно приближается к нулю, мой подозреваемый abc.Searcher.Search(_enteredText); возвращает вам пустой список.Вы можете подтвердить то же самое, проверив abc.Searcher.Search(_enteredText).Count();.

1 голос
/ 17 марта 2019

Будет ли работать для вас вместо этого?

IEnumerable cars = abc.Searcher.Search(_enteredText);
var orderedcars = cars.Cast<ModelClass>().ToList().OrderBy(x => x.Name);
abc.LoadallMacthingInventory(orderedcars.AsEnumerable());
0 голосов
/ 17 марта 2019

Я получил список, отсортированный с помощью ApplySort перед привязкой к сетке таким образом. Надеюсь, это кому-нибудь поможет.

 PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(carBL[0]);
 PropertyDescriptor myProperty = properties.Find("Name", false);
 carBL.ApplySort(myProperty, ListSortDirection.Ascending);
 grdResults.DataSource = carBl ;  //all sorted!! 
...