通过数据行中字段的值获取列名
Get column name by value of field in datarow
我的问题实际上更多是关于优化我已经在做的事情。
我很难相信没有更好的方法可以使用 LINQ 查询或 lambda 表达式来执行此操作,所以我想我会在这里尝试。
我的数据表的每一行都有一个项目编号和 43 个数量列,每个列对应于特定的一天。我想要做的是获取每一行,并找到第一个大于 0 的数量列和 return 该列名。我的解决方案确实有效,但我真的想让它更有效率:
foreach (DataRow r in dt.Rows)
{
for (int i = 3; i <= dt.Columns.Count - 1; i++)
{
tempCol = dt.Columns(i).ColumnName.ToString();
rowValue = Convert.ToInt32(r(tempCol));
if (rowValue > 0)
{
tempCol = tempCol.Replace("Apat", "");
break;
}
}
var FirstAvailableDate = WorkDate.AddDays((dec)tempCol).ToShortDateString;
//use data in someway
}
感谢您提前提出任何建议!!
当前代码,每行*每列
- 获取列名
- 将其存储在变量中
- 在匹配情况下执行 String.Replace
我的建议:
var allCols = dt.Columns
.Cast<DataColumn>()
.Select(col => col.ColumnName.Replace("Apat", ""))
.ToArray();
foreach (DataRow r in dt.Rows)
{
var firstCol =
r.ItemArray.Select((cell, position) => Tuple.Create(Convert.ToInt32(cell), position))
.FirstOrDefault(tuple => tuple.Item1 > 0);
if(firstCol == null) continue;
var colName = allCols[firstCol.Item2];
var FirstAvailableDate = WorkDate.AddDays((dec)colName).ToShortDateString;
//use data in someway
}
请更改以下代码
Tuple.Create(Convert.ToInt32(position), 单元格)
var colName = allCols[firstCol.Item1];
工作正常...!!!
我的问题实际上更多是关于优化我已经在做的事情。 我很难相信没有更好的方法可以使用 LINQ 查询或 lambda 表达式来执行此操作,所以我想我会在这里尝试。
我的数据表的每一行都有一个项目编号和 43 个数量列,每个列对应于特定的一天。我想要做的是获取每一行,并找到第一个大于 0 的数量列和 return 该列名。我的解决方案确实有效,但我真的想让它更有效率:
foreach (DataRow r in dt.Rows)
{
for (int i = 3; i <= dt.Columns.Count - 1; i++)
{
tempCol = dt.Columns(i).ColumnName.ToString();
rowValue = Convert.ToInt32(r(tempCol));
if (rowValue > 0)
{
tempCol = tempCol.Replace("Apat", "");
break;
}
}
var FirstAvailableDate = WorkDate.AddDays((dec)tempCol).ToShortDateString;
//use data in someway
}
感谢您提前提出任何建议!!
当前代码,每行*每列
- 获取列名
- 将其存储在变量中
- 在匹配情况下执行 String.Replace
我的建议:
var allCols = dt.Columns
.Cast<DataColumn>()
.Select(col => col.ColumnName.Replace("Apat", ""))
.ToArray();
foreach (DataRow r in dt.Rows)
{
var firstCol =
r.ItemArray.Select((cell, position) => Tuple.Create(Convert.ToInt32(cell), position))
.FirstOrDefault(tuple => tuple.Item1 > 0);
if(firstCol == null) continue;
var colName = allCols[firstCol.Item2];
var FirstAvailableDate = WorkDate.AddDays((dec)colName).ToShortDateString;
//use data in someway
}
请更改以下代码
Tuple.Create(Convert.ToInt32(position), 单元格)
var colName = allCols[firstCol.Item1];
工作正常...!!!