我正在开发一个MVC项目,我在其中遇到了代码,我必须将DataTable值与C#List和Sql Database中的Save list值进行比较,这是我的代码:
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);
}
}
}
}
dTable列包含名称,描述和编号
现在我想将List值与DataTable列进行比较 如果list.destination == dTable.description然后list.destinatiom = dTble.Number。
希望我能够解释我的问题。
答案 0 :(得分:0)
您只需要在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方法检索的其他记录中的值执行的操作。