在c#中List<>的orderby方法如何使用?如何对一个类别的数据按照其某个属性降序排列?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在c#中List<>的orderby方法如何使用?如何对一个类别的数据按照其某个属性降序排列?相关的知识,希望对你有一定的参考价值。
根据键按升序对序列的元素排序。class Pet
public string Name get; set;
public int Age get; set;
public static void OrderByEx1()
Pet[] pets = new Pet Name="Barley", Age=8 ,
new Pet Name="Boots", Age=4 ,
new Pet Name="Whiskers", Age=1 ;
IEnumerable<Pet> query = pets.OrderBy(pet => pet.Age);
foreach (Pet pet in query)
Console.WriteLine("0 - 1", pet.Name, pet.Age);
追问
这个没用到List呢?
参考技术A List<T>和T[],在使用LINQ排序时都是使用相同的方式list.OrderBy(i=>i.Property)即可追问
哦,那如果要实现升序排列,又怎样实现呢?
追答OrderBy()是升序,从小到大
OrderByDescending()是降序,从大到小
其实就我想实现一个功能,这个功能就是 我设计一个comboBox。
功能:
1、 我想把里面的选项当我选择后按回车就到了下面的listBox里面,而且comboBox里面删除该选项。
2、最后当我在listBox删除一个选项,那个这个选项就回到当初comboBox的原定位置。
这是我的想法:
我用一个bindingsource(下面简称bs)绑定一个comboBox的数据源,然后comboBox.dataSource=bs,然后再让bs.dataSource=list;
参考技术C List<>有orderby方法吗?用sort排序。C# List OrderBy 问题
【中文标题】C# List OrderBy 问题【英文标题】:C# List OrderBy Problem 【发布时间】:2011-10-22 02:56:58 【问题描述】:我正在使用 WPF,但遇到了关于在列表中排序的问题。 我找到了它使用 OrderBy 的示例(T => T.[引用它进行排序的字段]) 例如
List<Contact> contacts = new List<Contact>();
contacts.OrderBy(Contact => Contact.PhoneNumber)
效果很好。
但是,如果我不知道类型,甚至不知道该类型中的字段,我应该如何实现排序功能?
例如:我应该在 OrderBy(??? => ????.?????) 中输入什么
事实上,我想制作一个通用的 GridView,当用户单击其中一个标题时,它将按相应的列对整个列表进行排序。
非常感谢!
【问题讨论】:
如果您不知道对象的类型,您将如何对列表进行排序?排序是什么意思? 因为不管用户输入的数据如何,我都想做一个通用的排序方法 看看这是否有帮助。看起来有些相似。访问***.com/questions/188141/…希望对您有所帮助 【参考方案1】:有两种选择。
-
使用反射收集可以排序的公共属性
或
使用能够启用的类(一个很好的例子是 DataTable)
您可以通过索引访问值,即。 Contacts.OrderBy(Contact => Contact[3])
另见c# properties as array notation。
选项 1 展开:
获取一组公共属性似乎是一个不错的选择,而且非常容易:
var propertyInfos = typeof(MyClass).GetProperties(BindingFlags.Public | BindingFlags.Instance);
生成的数组可用于填充 gridView 的列并用于排序:
contacts.OrderBy(Contact => propertyInfos[0].GetValue(Contact, null));
【讨论】:
你能给我一些答案1的例子吗?谢谢!【参考方案2】:动态排序的两种解决方案...
GridView 的 ItemsSource 设置为 ICollectionView
或 ListCollectionView
,SourceCollection
设置为您自己的 List 并具有 SortDescription
,其中 PropertyName 可以指定为字符串值...http://marlongrech.wordpress.com/2008/11/22/icollectionview-explained/
Dynamic LINQ with MyList.AsQueryable().OrderBy(<OrderByClause>)
where order by 子句可以动态创建...How do I apply OrderBy on an IQueryable using a string column name within a generic extension method?
因此,当用户单击网格视图列标题时,您必须提取列所代表的属性名称并使用上述两种方法中的任何一种。在选项 2 中,您必须在对集合进行排序后设置 ItemsSource。
这两种方法中的任何一种都可以在适用于 GridView 的附加行为中完成,以便获得通用解决方案。
<ListView myNameSpace:ListSortingBehavior.SortingSource="CollectionView" ... /> <!-- CollectionView SortDescriptions -->
或
<ListView myNameSpace:ListSortingBehavior.SortingSource="Generic" ... /> <!-- AsQueryable LINQ -->
如果您使用选项 1,您必须担心它,那么您将不得不假设 GridView.ItemsSource 始终是一个 ICollectionView。在第二种方法中,权衡是您必须在排序后“设置”ItemsSource。
我希望这会有所帮助...
【讨论】:
【参考方案3】:如果您想对数据网格、列表视图、列表框等进行排序。你应该试试ICollectionView。你能提供更多关于你想要什么的信息吗?
【讨论】:
其实,我想做一个通用的GridView,当用户点击每个网格列的标题时,具有排序功能。【参考方案4】:您可以使用枚举进行某些类型的排序
喜欢
Sort.name
Sort.phone
Sort.adress
排序将使用字母和数字以及 desc 或 asc
希望我有帮助
【讨论】:
以上是关于在c#中List<>的orderby方法如何使用?如何对一个类别的数据按照其某个属性降序排列?的主要内容,如果未能解决你的问题,请参考以下文章
C#里使用linq做多个值的GroupBy操作,被操作对象类型为List<Dictionary<string, string>> datas