C# DataTable 操作汇总

一、某一列求和

  1. 列为数字类型
    double total= Convert.ToDouble(datatable.Compute("SUM(需要求和的参数)", ""));

2.列为string 类型 先转为数字类型 再求和
(遇到是采用了这个方法)
会报错,加using System.Linq;命名空间;
Filed里面会有的类型不一定是string,视情况而定;

double total= dt.AsEnumerable().Select(d => Convert.ToDouble(d.Field<string>("amount"))).Sum();

二、Select Not in用法
有一个DataTable(Ado.Net),其列为’Status’。 此列包含值(在每个记录中)
[ ‘红’, ‘绿’, ‘蓝’, ‘黄’, ‘白’, ‘OtherColors’]

我想选择状态值不是红色,绿色,蓝色的所有行

使用我提议的标准选择数据的filter表达式是什么样的。 所以我想要在sql查询中使用一些东西(WHERE Status NOT IN(’Red’,’Green’,’Blue’)

注意:这个项目运行.NET 2.0我不能使用linq

我测试了它,它按预期工作:

DataRow[] filtered = tblStatus.Select("Status NOT IN ('Red','Green','Blue')");

生成的DataRow[]仅包含带有OtherColors , Yellow和White DataRows。

如果你可以使用LINQ,我更喜欢:

string[] excludeStatus = {"Red","Green","Blue"}; var filteredRows = tblStatus.AsEnumerable() .Where(row => !excludeStatus.Contains(row.Field("Status")));

没有Linq,你可以像这样使用DataView的rowfilter

public DataTable GetFilteredData(DataTable table, string[] filterValues) { var dv = new DataView(table); var filter = string.join("','", filterValues); dv.RowFilter = "Status NOT IN ('" + filter + "')"; return dv.ToTable(); }

假设您的数据表是类型化数据集的一部分,您可以将Linq用于数据集,您可以从中使用以下内容:

var records = from record in datatable where !record.Status.Contains('Red','Green','Blue') select record;
即使您没有类型化的数据集,Linq to datasets也是您的答案。 你需要一些铸造,但并不困难。

三、排序
1.

DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("Name", typeof(string));

dt.Rows.Add(new object[] { 12, "lwolf" });
dt.Rows.Add(new object[] { 100,"kkkkk"});
dt.Rows.Add(new object[] { 19,"jim" });
dt.Rows.Add(new object[] { 1,"test" });

DataTable dtCopy = dt.Copy();

DataView dv = dt.DefaultView;
dv.Sort = "ID";
dtCopy = dv.ToTable();
DataTable dt = new DataTable();

dt.Columns.Add("ID", typeof(string));

dt.Columns.Add("CreateTime", typeof(string));

dr = dt.NewRow();

.....

dt.Rows.Add(dr);

dt.DefaultView.Sort = "CreateTime DESC";

CreateTime 是列名,ASC/DESC 升序/降序排列。
DataTable dt = new DataTable();
dt.Columns.Add("Name");
dt.Columns.Add("Age");//因为是字符串,所以排序不对
dt.Rows.Add("小明", "21");
dt.Rows.Add("小张", "10");
dt.Rows.Add("小红", "9");
dt.Rows.Add("小伟", "7");
dt.Rows.Add("小美", "3");
dt.DefaultView.Sort = "Age ASC";
dt = dt.DefaultView.ToTable();

四、将一列转为List
List<T> homeworkIdList = (from r in dataTable.AsEnumerable() select r.Field<T>("列名")).ToList<T>();

参考链接:
https://blog.csdn.net/weixin_40508362/article/details/106668117
https://www.ssfiction.com/ckf/960889.html
https://blog.csdn.net/xuetian0546/article/details/110517844

posted on 2023-03-31 16:59  糯米白白  阅读(1569)  评论(0编辑  收藏  举报

导航