在xamarin形式中,我有一个Oberservable的wordpress帖子集合。
我要按此集合中的特定值对该集合进行排序?
如何在Xamarin表单/ C#中做到这一点?
我可以看到有人在使用
list.OrderByDescending(x => DateTime.Parse(x)).ToList();
但这并不使用Observable集合或该集合中的特定值进行排序。
我的对象的填充是这样:
FlowObservableCollection<RootObject2> result = JsonConvert.DeserializeObject<FlowObservableCollection<RootObject2>>(await posts.Content.ReadAsStringAsync());
有人对我的数组排序有解决方案吗?
我要排序的值是一个子值,例如:mycollection.group.Myvalue
提前谢谢!
答案 0 :(得分:3)
我对FlowObservableCollection<T>
不熟悉,但是从我看来,它似乎是ObservableCollection<T>
Microsoft Docs 的子类型。
由于ObservableCollection<T>
本身是Collection<T>
的子类型,因此实现了IEnumerable<T>
,因此使用它的extension methods应该没有任何问题,例如OrderBy
。
我可以看到有人在使用
list.OrderByDescending(x => DateTime.Parse(x)).ToList();
我要排序的值是一个子值,例如:mycollection.group.Myvalue
您是否熟悉OrderByDescending()
示例的lambda expressions中使用的LINQ query?
如果不是,则list.OrderByDescending(x => DateTime.Parse(x)).ToList();
中的术语x
指的是列表中的元素,而您在=>
箭头右侧指定的内容是订购的关键。 / p>
因此,如果您想按其他值排序,则可以简单地写类似myCollection.OrderByDescending(x => x.MyProperty);
之类的符号,请注意,只要箭头两边的术语相同,就可以使用与x
不同的术语,例如myCollection.OrderByDescending(myElement => myElement.MyProperty);
最后请注意,对myCollection.OrderByDescending()
的调用会返回一个新的IEnumerable
,其中包含在myCollection
中找到的元素,并且不会更改myCollection
本身。
您不能将IEnumerable<T>
投射到FlowObservableCollection<T>
。因此,如果需要有序的FlowObservableCollection<T>
,则必须使用有序的IEnumerable
作为输入实例化一个新的。
您的情况如下所示:
var orderedElements = myCollection.OrderByDescending(x => x.MyProperty);
var orderedCollection = new FlowObservableCollection<RootObject2>(orderedElements);`
答案 1 :(得分:1)
您可以尝试以下方法:
Collection = new ObservableCollection(Collection.OrderBy(x=>x.Date).ToList());
或采用此方法:
public static void Sort<T>(this ObservableCollection<T> collection, Comparison<T> comparison)
{
var sortableList = new List<T>(collection);
sortableList.Sort(comparison);
for (int i = 0; i < sortableList.Count; i++)
{
collection.Move(collection.IndexOf(sortableList[i]), i);
}
}