orderbydescending 多个排序(c# list集合中有一个模型,然后怎么根据里面某一个字段排序)
本文目录
- c# list集合中有一个模型,然后怎么根据里面某一个字段排序
- c#做3个数降序排列,简单些,谢谢
- c#编程 (12,2,5)按从大到小排序
- C# LINQ 匿名类 动态排序
- 如何将list作为linq的数据源进行排序
- C#中,某一多属性类的排序该如何实现不用LinQ
- linq ,语句是 query = query.OrderByDescending(NewsTj => NewsTj.Id); 为什么不按倒序进行排序呢
- LINQ的OrderBy有多个字段
- C# winform 中datagridview ,如何实现点击列头,对应的列自动排序
- C#用OrderByDescending(a => a.字段A)怎么忽略数据库字段A前面N行
c# list集合中有一个模型,然后怎么根据里面某一个字段排序
你好,最简单的方法:命名空间引用using System.Linq;假设你的这个IList的对象名为listTemp;var listResult = listTemp.OrderbyDescending ( x =》 x.age ).ToList();
c#做3个数降序排列,简单些,谢谢
把数字放到数组中int Num={1,3,2};var query= Num.OrderByDescending(s =》 s);foreach(var item in query)console.WriteLine(item);
c#编程 (12,2,5)按从大到小排序
参考:http://blog.csdn.net/tolearner/article/details/5836110
private void button1_Click(object sender, EventArgs e) { int j = new int { 12, 2, 5, 6, 4, 1, 8, 3, 7, 9, 11, 10 }; BubbleSort(j); textBox1.Text = null; for (int i = 0; i 《 j.Length; i++) { textBox1.AppendText(j = temp; } } } }C# LINQ 匿名类 动态排序
private static IEnumerable《T》 Sort《T》(IEnumerable《T》 source, string propertyName, bool asc) { Func《T, object》 func = s =》 s.GetType().GetProperty(propertyName).GetValue(s, null); if (asc) return source.OrderBy(func); return source.OrderByDescending(func); }
//这代码测试通过的
这面是用Expression完成的,加了缓存,效率会高很多
private static readonly ConcurrentDictionary《string, Delegate》 exp_handlers = new ConcurrentDictionary《string, Delegate》(); private static IEnumerable《T》 Sort《T》(IEnumerable《T》 source, string propertyName, bool asc) { var key = typeof(T).FullName + “,“ + propertyName; var func = (Func《T, object》)exp_handlers.GetOrAdd(key, k =》 { var exp_param = Expression.Parameter(typeof(T), “param“); var exp_property = Expression.Property(exp_param, propertyName); var exp_return = Expression.Convert(exp_property, typeof(object)); return Expression.Lambda《Func《T, object》》(Expression.Block(exp_property, exp_return), exp_param).Compile(); }); //Func《T, object》 func = s =》 s.GetType().GetProperty(propertyName).GetValue(s, null); if (asc) return source.OrderBy(func); return source.OrderByDescending(func); }
使用方式
var a = Sort(f, “a1“, false)//按a1属性倒序排如何将list作为linq的数据源进行排序
List《int》 lst = new List《int》() {3,4,2,1 }; lst = lst.OrderBy(item =》 item).ToList(); foreach (int i in lst) { MessageBox.Show(i.ToString()); }输出的字符是按升序排列的,如果降序使用OrderByDescending多个条件排序后面的写ThenBy或ThenByDescending
C#中,某一多属性类的排序该如何实现不用LinQ
在达人博客上看到的:是个系列,一共三篇,你去百度搜搜“LINQ to SQL、NHibernate比较”就能找到了。我给你转第一篇。LINQ to SQL、NHibernate比较(一)-- LINQ和NHibernate初体验 1 引言 研发与数据库打交道的系统的时候,最过于繁琐的莫过于没有编程快感的使用ADO.NET对后台数据库进行操作,因为所有的数据库连接、读取、操作千篇一律,编程成为了体力活。 虽然我们可以设计自己的类作为数据库访问的持久层,但是每一个类都必须有不相同的SQL语句,这样对于设计统一的数据库读写类造成了很大的困难。 开发人员在这种情况下必须包办窗体设计、方法设计、数据库读写设计的过程,这样加大了开发人员的负担也使得项目的维护和后期开发变得难以进行。 2 .NET下的ORM解决方案 2.1 LINQ 2.1.1 LINQ简介 作为微软开发的查询方案,LINQ 提供了一条更常规的途径即给 .Net Framework 添加一些可以应用于所有信息源( all sources of information )的具有多种用途( general-purpose )的语法查询特性( query facilities ),这是比向开发语言和运行时( runtime )添加一些关系数据( relational )特性或者类似 XML 特性( XML-specific )更好的方式。这些语法特性就叫做 .NET Language Integrated Query (LINQ) 。 如果觉得上面的解释有点抽象,那么可以这样理解,LINQ其实就是提供了一套查询功能,可以实现任何数据源的查询,此处数据源不单指数据库或者XML文件,而是任何集合或者实体,比如我们接触各种编程语言都需要用到的数组,现在不用遍历数组元素来寻找需要的项,LINQ可以实现这方面的查询。 LINQ查询数组: 图2.1 LINQ查询数组 上面是最简单的LINQ实现对数组的查询,泛型类型var在LINQ查询中提供了强大的委托类型支持,不管查询集合中项的类型(无论是int,char还是string或者类),我们只用一个var就可以保存LINQ查询到的结果。程序结果如下: 图2.2 LINQ查询数组程序结果 是不是很方便,LINQ的应用远远不这些,通过不同的映射方案,我们可以实现对数据库(LINQ To SQL),对XML文件(LINQ To XML)的访问。 2.1.2 LINQ简介 表2.1 LINQ的操作符 操作符 说明 聚合 Aggregate 对序列执行一个自定义方法 Average 计算数值序列的平均值 Count 返回序列中的项目数(整数) LongCount 返回序列中的项目数(长型) Min 查找数字序列中的最小数 Max 查找数字序列中的最大数 Sum 汇总序列中的数字 连接 Concat 将两个序列连成一个序列 转换 Cast 将序列中的元素转换成指定类型 OfType 筛选序列中指定类型的元素 ToArray 从序列返回一个数组 ToDictionary 从序列返回一个字典 ToList 从序列返回一个列表 ToLookup 从序列返回一个查询 ToSequence 返回一个 IEnumerable 序列 元素 DefaultIfEmpty 为空序列创建默认元素 ElementAt 返回序列中指定索引的元素 ElementAtOrDefault 返回序列中指定索引的元素,或者如果索引超出范围,则返回默认值 First 返回序列中的第一个元素 FirstOrDefault 返回序列中的第一个元素,或者如果未找到元素,则返回默认值 Last 返回序列中的最后一个元素 LastOrDefault 返回序列中的最后一个元素,或者如果未找到元素,则返回默认值 Single 返回序列中的单个元素 SingleOrDefault 返回序列中的单个元素,或者如果未找到元素,则返回默认值 相等 SequenceEqual 比较两个序列看其是否相等 生成 Empty 生成一个空序列 Range 生成一个指定范围的序列 Repeat 通过将某个项目重复指定次数来生成一个序列 分组 GroupBy 按指定分组方法对序列中的项目进行分组 联接 GroupJoin 通过归组将两个序列联接在一起 Join 将两个序列从内部联接起来 排序 OrderBy 以升序按值排列序列 OrderByDescending 以降序按值排列序列 ThenBy 升序排列已排序的序列 ThenByDescending 降序排列已排序的序列 Reverse 颠倒序列中项目的顺序 分区 Skip 返回跳过指定数目项目的序列 SkipWhile 返回跳过不满足表达式项目的序列 Take 返回具有指定数目项目的序列 TakeWhile 返回具有满足表达式项目的序列 投影 Select 创建部分序列的投影 SelectMany 创建部分序列的一对多投影 限定符 All 确定序列中的所有项目是否满足某个条件 Any 确定序列中是否有任何项目满足条件 Contains 确定序列是否包含指定项目 限制 Where 筛选序列中的项目 设置 Distinct 返回无重复项目的序列 Except 返回代表两个序列差集的序列 Intersect 返回代表两个序列交集的序列 Union 返回代表两个序列交集的序列Lambda 表达式 许多标准查询操作符在对序列执行运算时都使用 Func 委托来处理单个元素。Lambda 表达式可与标准查询操作符结合使用以代表委托。lambda 表达式是创建委托实现的简略表达形式,并可用于匿名委托适用的所有场合。C# 和 Visual Basic .NET 均支持 Lambda 表达式。但是,必须注意:由于 Visual Basic .NET 尚不支持匿名方法,Lambda 表达式可能仅包含一个语句。 上例中的的程序等同于下面 图2.3 Lambda表达式的使用 2.2 NHibernate 说到NHibernate,就不得不提Hibernate,原因很简单,Hibernate顾名思义就是Hibernate的.NET版本。 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。 NHibernate作为Hibernate的.NET应用于Hibernate的实现完全相同,学习NHibernate完全可以直接学习Hibernate的资料。 事实上,虽然在Java数据库映射领域Hibernate是使用最为广泛的方案,但是在.NET中由于LINQ等映射方案(包括微软下一代重量级的Entity Framework)的使用,NHibernate冷了许多。 NHibernate需要配置数据库配置文件和类/表映射配置文件,所以使用NHibernate需要懂得XML文件的基础知识,并且需要掌握比较复杂的XML文件配置节和相应的配置命令。 2.2.1 数据库配置文件 NHibernate官方提供了配置文件的模板和实例可供我们参考。 图2.4 NHibernate官方数据库配置文件模板(对应了不同的数据库) 上图为数据库配置文件。通常以“cfg.xml”作为后缀,一个示例的文件内容如下 图2.5 数据库配置文件示例 下面是一些在运行时可以改变NHibernate行为的其他配置。所有这些都是可选的,也有合理的默认值。 表2.2 NHibernate 配置属性 属性名 用途 hibernate.dialect NHibernate方言(Dialect)的类名 - 可以让NHibernate使用某些特定的数据库平台的特性 例如: full.classname.of.Dialect(如果方言创建在NHibernate中), 或者full.classname.of.Dialect, assembly (如果使用一个自定义的方言的实现,它不属于NHibernate)。 hibernate.default_schema 在生成的SQL中,scheml/tablespace的全限定名. 例如: SCHEMA_NAME hibernate.prepare_sql 是否准备sql语句 例如: true | false hibernate.session_factory_name SessionFactory被创建后将自动绑定这个名称. 例如: some.name hibernate.use_outer_join 允许使用外连接抓取。 例如:true | false hibernate.cache.provider_class 指定一个自定义的CacheProvider缓存提供者的类名 例如: full.classname.of.CacheProvider(如果ICacheProvider创建在NHibernate中), 或full.classname.of.CacheProvider, assembly(如果使用一个自定义的ICacheProvider,它不属于NHibernate)。 hibernate.query.substitutions 把NHibernate查询中的一些短语替换为SQL短语(比如说短语可能是函数或者字符)。 例如: hqlLiteral=SQL_LITERAL, hqlFunction=SQLFUNC 2.2.2 实体映射配置文件 NHibernate官方开源包中提供了实体映射配置文件的实例可供我们参考。 图2.6 NHibernate开源包中提供的实体映射配置文件 与数据库配置文件一样实体映射配置文件也是XML文件(XML果然是很强大啊,微软下一代应用程序开发技术WPF就是使用XML文件将C/S和B/S长期分居的二人统一到一个屋檐下),所不同的是实体映射配置文件后缀是“hbm.xml”。 图2.7 实体映射配置文件 实体映射配置文件所要配置的信息一般为 Ø Schema 所有的XML映射都需要使用nhibernate-mapping-2.0 schema。目前的schema可以在NHibernate的资源路径或者是NHibernate.dll的嵌入资源(Embedded Resource)中找到。NHibernate总是会优先使用嵌入在资源中的schema文件。 Ø hibernate-mapping (1) schema (可选): 数据库schema名称. (2) default-cascade (可选 - 默认为 none): 默认的级联风格. (3) auto-import (可选 - 默认为 true): 指定是否我们可以在查询语言中使用非全限定的类名(仅限于本映射文件中的类)。 (4) default-access (可选 - 默认为 property): NHibernate访问属性值时的策略。 (5) assembly (可选): 指定一个程序集,如果在映射文档中没有指定程序集,就使用这个程序集。 (6) namespace (可选): 指定一个命名空间前缀,如果在映射文档中没有指定全限定名,就使用这个命名空间名。Ø class (1) name: 持久化类(或者接口)的全限定名。 (2) table: 对应的数据库表名。 (3) discriminator-value (可选 - 默认和类名一样): 一个用于区分不同的子类的值,在多态行为时使用。 (4) mutable (可选, 默认为 true): 表明该类的实例可变(不可变)。 (5) schema (可选): 覆盖在根《hibernate-mapping》 元素中指定的schema名字。 (6) proxy (可选): 指定一个接口,在延迟装载时作为代理使用。你可以在这里使用该类自己的名字。 (7) dynamic-update (可选, 默认为 false): 指定用于UPDATE 的SQL将会在运行时动态生成,并且只更新那些改变过的字段。 (8) dynamic-insert (可选, 默认为 false): 指定用于INSERT的 SQL 将会在运行时动态生成,并且只包含那些非空值字段。 (9) polymorphism (可选, 默认为 implicit(隐式)): 界定是隐式还是显式的使用查询多态。 (10) where (可选) 指定一个附加的SQL WHERE 条件,在抓取这个类的对象时会一直增加这个条件。 (11) persister (可选): 指定一个定制的 IClassPersister. (12) lazy(可选):假若设置 lazy=“true“,就是设置这个类自己的名字作为proxy接口的一种等价快捷形式。Ø id (1) name (可选): 标识属性的名字。 (2) type (可选): 标识NHibernate类型的名字。 (3) column (可选 - 默认为属性名): 主键字段的名字。 (4) unsaved-value (可选 - 默认为 null): 一个特定的标识属性值,用来标志该实例是刚刚创建的,尚未保存。这可以把这种实例和从以前的session中装载过(可能又做过修改--译者注)但未再次持久化的实例区分开来。 (5) access (可选 - 默认为 property): NHibernate用来访问属性值的策略。除此之外我们可以通过其他途径深入了解配置方面的知识,一个NHibernate项目,配置文件的错误往往导致错误的结果甚至使得程序无法运行。 3 小结 本文初步介绍了LINQ to SQL和NHibernate,其中介绍NHibernate使用了较多的篇幅,因为相对LINQ to SQL而言NHibernate的使用入门门槛较高,配置较为复杂。关于LINQ to SQL、NHibernate优缺点将在后面文章中讨论,不过从此处其实已经得出一点,那就是LINQ to SQL比NHibernate更加容易上手,节省了人员培训的开销。
linq ,语句是 query = query.OrderByDescending(NewsTj => NewsTj.Id); 为什么不按倒序进行排序呢
OrderByDescending(方法通过使用延迟执行实现。 即时返回值为一个对象,该对象存储执行操作所需的所有信息。 只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach(或 Visual Basic 中的 For Each)来枚举该对象时,才执行此方法表示的查询。-----------以上是官方资料,说的直白一些,你的query可能还没输出,中间结果就被别的操作给覆盖了。本人倒是有一次出现这样的情况,是因为数据量庞大,延迟处理导致输出序列阶段有效。----解决思路:即时输出。使用ToXXXX() 方法。------如果不是以上原因,请放出所有源程序,一句代码不够。
LINQ的OrderBy有多个字段
LINQ 按多个字段排序(orderby、thenby、Take) orderby 子句解析为 OrderBy()方法,orderby descending 子句解析为OrderBy Descending()方法:var racers = Formula1.GetChampions().Where(r = 》 r.Country == “Brazil“).OrderByDescending(r = 》 r.Wins).Select(r = 》 r);OrderBy() 和 OrderByDescending ()方法返回 IOrderEnumerable。这个接口派生于接口IEnumerable,但包含一个额外的方法CreateOrderedEnumerable- ()。这个方法用于进一步给序列排序。如果根据关键字选择器来排序,两项的顺序相同,就可以使用 ThenBy()和 ThenByDescending ()方法继续排序。这两个方法需要 IOrderEnumerable才能工作,但也返回这个接口。所以,可以添加任意多个 ThenBy()和 ThenByDescending ()方法,对集合排序。 使用 LINQ 查询时,只需把所有用于排序的不同关键字(用逗号分隔开)添加到orderby 子句中。这里,所有的赛手先按照国家排序,再按照姓氏排序,最后按照名字排序。添加到 LINQ 查询结果中的Take()扩展方法用于提取前 10 个结果:private static void Ordering() { var racers = (from r in Formula1.GetChampions()orderby r.Country, r.LastName, r.FirstName select r).Take(10); foreach (var racer inracers) { Console.WriteLine(“{0:C}: {0:L}, {0:F}“, racer); //属性名的第一个字母 } }Lambda表达式 使用OrderBy()和 ThenBy()方法可以执行相同的操作:private static void Ordering() {var racers = Formula1.GetChampions(). OrderBy(r =》 r.Country). ThenBy(r =》 r.LastName). ThenBy(r =》 r.FirstName). Take(10);foreach (var racer in racers) { Console.WriteLine(“{0:C}: {0:L}, {0:F}“, racer); //属性名的第一个字母 }}
C# winform 中datagridview ,如何实现点击列头,对应的列自动排序
在使用 DataGridView时,对于数值列,默认的排序方式仍然是按照字符串方式进行
如果需要按照数值型进行排序,有几种办法,其中一种就是重载SortCompare方法
//重载_SortCompare方法
private void DataGridView1_SortCompare(object sender,DataGridViewSortCompareEventArgs e)
{
// 如果是学号或成绩列,则按浮点数处理
if(e.Column.Name==“学号“|| e.Column.Name==“成绩“)
{
e.SortResult = (Convert.ToDouble(e.CellValue1) - Convert.ToDouble(e.CellValue2) 》 0) ? 1 : (Convert.ToDouble(e.CellValue1) - Convert.ToDouble(e.CellValue2) 《 0)?-1:0;
}
//否则,按字符串比较
else
{
e.SortResult = System.String.Compare(Convert.ToString(e.CellValue1), Convert.ToString(e.CellValue2));
}
// 如果发现两行相同,则按学号排序
if (e.SortResult == 0 && e.Column.Name != “学号“)
{
e.SortResult = Convert.ToInt32(DataGridView1.Rows.Value.ToString()) -
Convert.ToInt32(DataGridView1.Rows.Value.ToString());
}e.Handled = true;//不能省掉,不然没效果}
C#用OrderByDescending(a => a.字段A)怎么忽略数据库字段A前面N行
软糖来回答罗~~
方法1:
先添加一个索引字段 ID ,给前N条记录赋值1,后N条赋值2
然后再用复合条件排序
var 查询结果 = dt.OrderByDescending(a =》 a.ID).ThenByDescending(a =》 a.字段A);方法2:
先复制一个只包含后N条数据的DataTable,再进行排序:
public static DataTable DtSelectTop(int Start,int End, DataTable oDT) { if (oDT.Rows.Count 《 TopItem) return oDT; DataTable NewTable = oDT.Clone(); DataRow rows = oDT.Select(“1=1“); for (int i = Start; i 《= End; i++) { NewTable.ImportRow((DataRow)rows); } return NewTable; }满意请采纳,谢谢。
更多文章:

免费下载动画模板(我想自己制作动画,要什么软件,在哪野可以下载)
2025年3月23日 03:30

房产小程序后台有什么功能?有房产项目的小程序吗有没有必要定制一个
2025年2月18日 02:10

什么是图灵机和通用计算机?图灵在计算机科学领域对人类的重大贡献有哪些
2025年3月23日 11:10

spark入门(如何在spark基础二次开发基于java swing的pc客户端)
2025年3月14日 21:50

嵌入式系统特点(嵌入式计算机系统同通用型计算机系统相比有什么特点呢)
2025年2月10日 20:50

senior manager(Director和senior manager哪个级别高)
2025年3月8日 22:00

html中label是什么意思啊(<label></label>标记是什么意思)
2025年2月28日 08:10