C#在DataTable中可以完成这样的排序操作吗?

以分钟为单位,从A设备和B设备中采集到如下表所示的数据:

这个表只是做个例子,实际上数据非常多。
其中sn是采集的次序。
采集到的数据被添加在了DataTable中。
现在想把DataTable中的数据处理成这样,然后写入数据库:

即不改变sn的次序,将A的排序和B的排序添加到这个表里。
这个操作我不想依赖数据库,想直接在内存中进行,另外也不能用Linq,因为平台是Framework 2.0。
用什么办法处理效率最高?程序最简洁?
另外我想问一下,如果采集到的数据不放在DataTable里,而是放在数组中,处理会不会更方便高效?

用10万条数据进得了一下测试,时间还是可以忍受的
DataTable dtSource = null; //主数据源,排序后的结果保存在该DataTable中 DataTable dtSourceCopy = null; //主数据源的Copy版本,用来对B进行排序 private void button3_Click(object sender, EventArgs e) { dtSource = new DataTable(); dtSource.Columns.Add("Sn"); dtSource.Columns.Add("A"); dtSource.Columns.Add("A排序"); dtSource.Columns.Add("B"); dtSource.Columns.Add("B排序"); Random rand = new Random(); for (int i = 1; i <= 100000; i++) //插入10万条测试数据 { dtSource.Rows.Add(new object[] { i, rand.NextDouble(), 0, rand.NextDouble(), 0 }); } dtSourceCopy = dtSource.Copy();//COPY } private void button1_Click(object sender, EventArgs e) { dtSource.DefaultView.Sort = " A DESC"; dtSourceCopy.DefaultView.Sort = " B DESC"; foreach (DataRow dr in dtSource.Rows) { dr["A排序"] = dtSource.DefaultView.Find(dr["A"].ToString()) + 1; dr["B排序"] = dtSourceCopy.DefaultView.Find(dr["B"].ToString()) + 1; } }
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-12-20
可以在原来的datatable增加两列,并通过DataView排序,然后遍历排序后的Dataview,获取表示某行的DataRowView,通过其Row属性访问原来的Datarow,最后将第三列的数据修改成遍历时的index即可:

table.DefaultView.Sort = "A";

for (int i = 0; i < table.DefaultView.Count; i++) {
DataRowView row = table.DefaultView[i];
row.Row["A排序"] = i + 1;
}

以此类推写入第五列。本回答被网友采纳
第2个回答  2013-12-20

    放数组应该会更高效

    尽量用.net自带的排序

    如果有重复值怎么办呢?

第3个回答  2013-12-20
这个可以实现。只是需要做三次排序,如果你的DataTable数据量非常庞大,你的程序可能会非常占用系统资源。
另外,你没必要不改变sn的顺序,因为你的sn的值是固定的,无论如何改变顺序,sn的值都不会变,当然更不会影响到插入到数据库中的结果。所以,你需要做的,只是把A和B的排名算出来而已,这样,你就可以省去一次排序,提升性能。

C#中怎么多datatable中某列中升序排列的数据按照指定的差值分组?
在 C# 中,你可以使用 LINQ 查询来实现这一目的。首先,你需要使用 OrderBy 方法将数据表中的数据按照指定的列升序排列。然后,你可以使用 GroupBy 方法将数据分组,按照指定的差值分组。例如,假设你有一个名为 dataTable 的数据表,其中包含一列名为 value 的数值数据,你想将这些数据按照每 5 个为...

c#中怎样按姓名的字母表顺序排名
楼上说的对,如果是从数据库中读取数据,查询时按照姓名列进行排序,在查询语句后面加上 order by name数据;(默认按姓的拼音字母表顺序排序)如果是从集合对象里如DataTable里面,也可以进行按姓名排序,不过有点麻烦,如下:DataTable dt=获取数据集合;DataRow[] filter = dt.Select(" zcbm is no...

C# 如何修改dataset表里面上下行的顺序
dataset里面的数据是datatable,而datatable是没有顺序的,你所谓的排序只是对table 的 defaultView进行排序 datatable.DefaultView.Sort = "Col asc";

C#得到datatable,给它分组后按每组进行排序号
var grs = dt.Rows.OfType<DataRow>() .GroupBy(x => x["学生姓名"]); foreach (var gr in grs) { foreach (DataRow r in gr) { r["排序"] = gr.ToList().IndexOf(r); } }

c# DataTable中如何能根据两个字段排序?order a,b这样
DataTable dt = new DataTable();DataView dv = dt.DefaultView;dv.Sort = "CLOUMN ASC"; \/\/排序DataTable dt2 = dv.ToTable();

C#中我怎样为我计算完成的数据在accress中加一列当作排名
1、改SQL,ROW_NUMBER() OVER ()这个就可以了。SELECT ROW_NUMBER() OVER (Order by 条件,把你后面的排序移到这来) as RowID,Class as 班级...2、写Linq操作DataTable DataTable dt = ds.Tables[0]; \/\/取你的结果 var k = from x in dt.AsEnumerable()select new { RowID = dt....

跪求C#怎么对数据库中的数据进行排序
可以在两方面进行排序。一方面为sql查询语句,追加order by id desc 在数据库层面进行排序。另一方面在c#数据请求后,将数据保存为datatable后, 对dt.DefaultView.Sort = "需要排序的字段名 DESC";排序即可。

C#在DataTable中排好序之后用for循环输出之后顺序乱了,
代码贴出来啊,不过想想应该不会乱得吧,你直接用sql语句排序,放在table里的数据就不会乱了,这说明你的table排序就是乱的

c#如下如何在datatable里吧列3列4复制到列6列7
大概是这样:\/\/假定Dt已经有7列并有数据 foreach (DataRow dr in dt.Rows) { dr[6] = dr[3]; dr[7] = dr[4]; \/\/... }

C#中如何用DataTable 获取一个表的集合 在用DataTable获取另一张表...
我的思路是,DataTable A, DataTable B,按照一个字段(关键字段),按照同一种方法进行排序,例如 都是desc 吧,这样的话,你只用将A中的关键字段,和B中的第一个关键字段来进行比较,如果A.关键字段<B.关键字段,则A.关键字段++; A.关键字段==B.关键字段 则,删除。既然你说了,B中的数据...

相似回答
大家正在搜