将Datatable与C#List

时间:2018-06-18 11:57:08

标签: c# datatable compare

我正在开发一个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。

希望我能够解释我的问题。

1 个答案:

答案 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方法检索的其他记录中的值执行的操作。