首页 > 解决方案 > 将排序列表转换回 IEnumerable 不会返回任何结果

问题描述

这是我需要在绑定之前对其进行升序排序的代码。这是从定义了汽车类型并附加到此公共控件中的 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;

       }

标签: c#listlinqsortingienumerable

解决方案


首先orderedcars.AsEnumerable();这里不需要。OrderBy(x => x.Name);子句返回IOrderedEnumerable<TElement>它派生自IEnumerable<TElement>,因此您可以直接传递orderedcarsLoadallMacthingInventory方法abc.LoadallMacthingInventory(orderedcars);. 因此,没有产生结果的观察orderedcars.AsEnumerable()不是由于AsEnumerable(). 相反,您应该查看是否cars.Cast<ModelClass>().ToList().OrderBy(x => x.Name).Count();大于零。如果它变为零,我的怀疑是abc.Searcher.Search(_enteredText);给你一个空列表。您可以通过检查来确认abc.Searcher.Search(_enteredText).Count();


推荐阅读