c# - C# - 如何在 DataTable 中进行数学运算
问题描述
我有一个 DataTable,我想在将它们添加到 DataGridView 之前进行一些数学运算。第一个,我想找到我的 DataTable 的第三列的最大数量,第二个我想将第三列中的所有值除以这个最大数量。毕竟我想替换我的新值而不是旧值。我的 DataTable 看起来像这样;
Column 1 Column 2 Column 3
---------------------------------------
a b 2000000
q r 250000
s t 185000
m w 400000
o p 750000
操作后,我的 DataTable 应该是这样的;
Column 1 Column 2 Column 3
---------------------------------------
a b 1
q r 0.125
s t 0.0925
m w 0.0002
o p 0.375
这是我的代码;
connection.Open();
//Some insignificant operations here.
for (int q = 0; q < w.Length; q++)
{
for (int a = q + 1; a < w.Length; a++)
{
string query = ".....";
SqlDataAdapter myAdapter = new SqlDataAdapter(query, connection);
DataTable myTable = new DataTable();
myAdapter.Fill(myTable);
//I started here for finding maximum number in DataTable.
int[] myColumn = dt.AsEnumerable().Select(x => x.Field<int>("Column3")).ToArray();
int myMaximum = myColumn.Max();
//I don't know what should I do after that.
foreach (DataRow myRows in myTable.Rows)
{
//Some significant operations again...
dgv1.Rows.Add(...);
}
}
}
connection.Close();
解决方案
我建议摆脱DataTable
并使用普通的 c# 类。
DataTable
是“重”结构,它做的比你需要的要多得多,在大多数情况下你不需要它。
创建类来表示您的数据
public class Item
{
public string Column1 { get; set; }
public string Column2 { get; set; }
public int Column3 { get; set; }
}
加载数据
public List<Item> LoadData()
{
var query = "SELECT Column1, Column2, Column3 FROM Table";
using (var connection = new SqlConnection(connectionString))
using (var command = connection.CreateCommand())
{
command.CommandType = CommandType.Text;
command.CommandText = query;
using (var reader = command.ExecuteReader())
{
var data = new List<Item>();
while(reader.Read())
{
var item = new Item
{
Column1 = reader.GetString(0),
Column1 = reader.GetString(1),
Column1 = reader.GetInt32(2)
};
data.Add(item);
}
return data;
}
}
}
创建将表示计算数据的类
public class CalculatedItem
{
public string Column1 { get; }
public string Column2 { get; }
public decimal Calculated { get; }
public CalculatedItem(Item item, decimal maxValue)
{
Column1 = item.Column1;
Column2 = item.Column2;
Calculated = (decimal)item.Column3 / maxValue
}
}
用法
var data = LoadData();
var maxValue = data.Select(item => item.Column3).Max();
var calculatedData = data.Select(item => new CalculatedItem(item, maxValue)).ToList();
// Bind data to the DataGridView
DataGridView1.DataSource = calculatedDate;
推荐阅读
- uwp - 如何在 UWP 中删除奇怪的视图框间距?
- python - 使用 read() 方法从 Amazon S3 读取大量 JSON 文件时出现 MemoryError
- python - 安装 conda-forge mlxtend - 安装 mlxtend 时出错 - 权限被拒绝
- javascript - Ember:没有找到“用户”的模型,并且在执行保存承诺时创建了重复的 POST
- javascript - 下载文件后删除链接
- cartopy - Cartopy 别名
- php - 为什么连接不上mysql?
- c# - 在 C# 中重命名变量
- wordpress - Wordpress 元查询 - 多个键
- algorithm - 0/1 用于优化的背包算法