0

这是我的代码:

public string[] RegresaprecionombreyId(DataTable tablalm, DataTable tablaep, string producto, string cliente, DateTime fecha)
{
    producto = ((int)Convert.ToDecimal(producto)).ToString();
    string precio = "0.00", preciobase = "0.00", nombre = "producto no encontrado", id = "00000000-0000-0000-0000-000000000000";

    if (tablaep.Rows.Count > 0)
    {
        string consulta = "ope_pro=" + producto + " and cliente=" + cliente + " and '" + fecha.ToString("yyyy-MM-dd") + "' >= inicio and '" + fecha.ToString("yyyy-MM-dd") + "' <= fin";
        DataRow[] filas = tablaep.Select(consulta);

        if (filas.Length > 0)
        {
            id = filas[0]["id"].ToString();
            nombre = filas[0]["nombre"].ToString();
            precio = filas[0]["precio"].ToString();
            preciobase = filas[0]["preciobase"].ToString();
            return new string[] { precio, nombre, id, preciobase };
        }
    }

    if (tablalm.Rows.Count > 0)
    {
        string consulta = "ope_pro='" + producto + "'";
        DataRow[] filas = tablalm.Select(consulta);

        if (filas.Length > 0)
        {
            id = filas[0]["id"].ToString();
            nombre = filas[0]["nombre"].ToString();
            DateTime fechatabla = Convert.ToDateTime(filas[0]["fechanue"].ToString());

            if (fecha >= fechatabla)
                precio = filas[0]["precionue"].ToString();
            else
                precio = filas[0]["precio"].ToString();

            return new string[] { precio, nombre, id, precio };
        }
    }

    return new string[] { precio, nombre, id, preciobase };
}

我有时使用 DataTable.Select(query)

使用此方法的其他代码是一个循环并使用 DataTable.Select 获取帐户的 id,在进入此方法并在 2 个表中再次使用 DataTable.Select(query) 后,第一个表是每个帐户都有不同价格的表例如每个产品

account  product  price
1          1      10
1          2      11
1          3      12
2          1      11
2          2      12
2          3      13

如果这没有出现在这个 DataTable 中,我现在用这种格式在其他表中查找

product  price
  1       10.5
  2       11.5
  3       11.5

第一个数据表有 17569 行;第二个数据表有 597 行。

那么当我调用这个方法时

RegresaprecionombreyId(DataTable tablalm, DataTable tablaep, string producto, string cliente, DateTime fecha)

每次调用它大约需要 3 或 4 秒,并且我有一个大约 3245 条记录的循环,所以 3245(记录)* 3(秒)这超过 2 小时。这次我该如何改进?

4

0 回答 0