在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()是降序,从大到小

本回答被提问者采纳
参考技术B

其实就我想实现一个功能,这个功能就是 我设计一个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 设置为 ICollectionViewListCollectionViewSourceCollection 设置为您自己的 List 并具有 SortDescription,其中 PropertyName 可以指定为字符串值...http://marlongrech.wordpress.com/2008/11/22/icollectionview-explained/

    Dynamic LINQ with MyList.AsQueryable().OrderBy(&lt;OrderByClause&gt;) 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# Sort 和 OrderBy 比较

C# list.Orderby 降序

在c#中,如何实现对一个列表数据List,进行降序排序

C#里使用linq做多个值的GroupBy操作,被操作对象类型为List<Dictionary<string, string>> datas

List<T> orderby 的动态链接 [重复]

C# LINQ