c# - C# Loinging DataTable 和基于数据类型的格式化值
问题描述
我在 DataTable 中获取查询结果,需要将 DataTable 中的整数和日期格式化为特定格式。由于某些限制,我无法在 SQL Server 中对其进行格式化。
我已经编写了下面的代码来格式化它,但它没有更新 DataTable。
public DataTable formatDT(DataTable DT)
{
string datatype, columnName;
decimal sysInt;
DateTime DateTime;
int r = 0;
foreach (DataRow dr in DT.Rows)
{
for (int i = 0; i < DT.Columns.Count; i++)
{
columnName = DT.Columns[i].ColumnName;
if (DT.Columns[i].ColumnName.ToString() == "full_count")
{
continue;
}
datatype = Convert.ToString(DT.Columns[i].DataType);
switch (datatype)
{
case "System.Int":
case "System.Int32":
case "System.Int64":
sysInt = Convert.ToInt32(dr[columnName]);
DT.Rows[r][columnName] = sysInt.ToString("N0");
break;
case "System.DateTime":
DateTime = Convert.ToDateTime(dr[columnName]);
DT.Rows[r][columnName] = DateTime.ToString("yyyy-MM-dd");
logger.Error(DT.Rows[r][columnName] + "<<<>>>>" + DateTime.ToString("yyyy-MM-dd")); //Even after assing 'DT.Rows[r][columnName]' is shows old values and not the formatted one
break;
case "System.Decimal":
case "System.Double":
sysInt = Convert.ToInt32(dr[columnName]);
DT.Rows[r][columnName] = sysInt.ToString("N2");
break;
default:
DT.Rows[r][columnName] = dr[columnName].ToString();
break;
}
}
r++;
}
DT.AcceptChanges();
return DT;
}
任何帮助表示赞赏。
解决方案
- 这是为了提醒您,如果您正在迭代
DataTable
usingforeach
,则无法修改或更新其值或类型。C# 不允许这样做。相反,您可以做的是声明另一个DataTable
并尝试向其中添加行并返回它。这就是我认为您在第二种方法中已经完成的操作,就像您的回答一样。 - 或者,您可以
System.Reflection
将此表作为List使用或返回。跟下面一样。
public static List<T> MakeList<T>(System.Data.DataTable tble)
{
return tble.AsEnumerable().Select(row =>
{
var properties = typeof(T).GetProperties();
var ob = Activator.CreateInstance<T>();
foreach (var pro in properties)
{
try
{
//Here you can apply your conversion
pro.SetValue(ob, row[pro.Name] != null
? row[pro.Name].ToString() : string.Empty);
}
catch (Exception e) { throw e; }
}
return ob;
}).ToList();
}
只需创建一个DataTable
列类并像这样传递该类的对象。为了
class example{
public a{get;set;}
public b {get;set;}
}
List<example> ls = MakeList<example>(dt);
推荐阅读
- vim - 在 .vimrc 中设置 nospell 无效
- python - 如何减小具有复杂值的数组的大小
- dask - 如何在多个 dask 数组之间共享相同的索引
- python - 创建服务器全局通道时避免重新启动机器人
- bash - 如何用unix中文件的修改日期减去今天的日期?
- javascript - 组合数组对象的可观察对象
- python-3.x - Keras 错误 - 预期 activation_1 的形状为 (2622,) 但数组的形状为 (1,)
- java - Socket InputStream.read(byte[],int,int) 总是返回第三个参数值
- fluentvalidation - FluentValidation:仅当字段不为空时才执行 .Must
- php - 卷曲返回'来自服务器的空回复'