这是我的代码:
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 小时。这次我该如何改进?