我正在做一个MVC项目,在这个项目中,我被代码困住了,我必须将DataTable值与C#列表进行比较,并在SQL数据库中保存列表值 下面是我的代码:
private void AddNumbers(DataTable dTable)
{
List<NumberRates> aPriceList = new List<NumberRates>();
NumberRates priceobj = null;
using (SLDocument sl = new SLDocument(filePath, "Pdf RATES"))
{
SLWorksheetStatistics stats = sl.GetWorksheetStatistics();
for (int row = 11; row <= stats.EndRowIndex; ++row)
{
try
{
priceobj = new NumberRates();
priceobj.destination = sl.GetCellValueAsString(row, 1);
priceobj.a_price = sl.GetCellValueAsDecimal(row, 3);
aPriceList.Add(priceobj);
}
}
}
}
d表列包含名称、描述和编号
现在我想将列表值与数据表列进行比较,并且 如果 list.destination==dTable.description 则 list.destinatiom = dTble.Number 。
希望我能够解释我的问题。
你只需要在 NumberRates 列表上循环一个循环,并为每个元素检查传递的表是否包含 Destination 键。如果找到它,则只需将 Number 值复制到 NumberRates 类的相应属性即可。
foreach(NumberRates element in aPriceList)
{
DataRow[] match = dTable.Select("Description = '" + element.destination + "'");
if(match.Length > 0)
element.Number = match[0].Number;
}
或者更好的是,为了避免第二次循环,只需将上述逻辑添加到当前代码中即可
for (int row = 11; row <= stats.EndRowIndex; ++row)
{
try
{
priceobj = new NumberRates();
priceobj.destination = sl.GetCellValueAsString(row, 1);
priceobj.a_price = sl.GetCellValueAsDecimal(row, 3);
aPriceList.Add(priceobj);
DataRow[] match = dTable.Select("Description = '" + priceobj.destination + "'");
if(match.Length > 0)
priceobj.Number = match[0].Number;
}
}
请注意,上面的代码假设目标和描述之间存在一对一的关系。如果数据表中有多个与"说明"搜索匹配的记录,则必须指定要对 Select 方法检索的其他记录中的值执行的操作。