将排序后的列表投射回IEnumerable不会返回任何结果

时间:2019-03-17 01:55:07

标签: c# list linq sorting ienumerable

这是我需要的代码,在绑定之前我需要对它进行升序排序。这是从另一个定义了cars类型并附加到此公共控件中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,但不确定propertydescriptor应该是什么。

搜索代码(文本)

       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 个答案:

答案 0 :(得分:1)

改为这样做对您有用吗?

IEnumerable cars = abc.Searcher.Search(_enteredText);
var orderedcars = cars.Cast<ModelClass>().ToList().OrderBy(x => x.Name);
abc.LoadallMacthingInventory(orderedcars.AsEnumerable());

答案 1 :(得分:1)

首先不需要 "background": { "scripts": ["background.js" ], "persistent": false }, "content_scripts": [ { "run_at" :"document_end", "matches": ["https://*"], "js": ["contentScript.js"], "all_frames": true } ], "web_accessible_resources": ["snippet.js"], 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);来确认。

答案 2 :(得分:0)

在以这种方式绑定到网格之前,我使用ApplySort对列表进行了排序,希望这对某人有所帮助。

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