【发布时间】:2011-11-10 02:55:19
【问题描述】:
我有一个数据库(C#,dll),它只包含一个表,自动生成百万行。
我一次只能得到一排。该表的列是:int ItemID, string category, string model, string Brand)。
如果两个项目具有相同的category, brand, model,则它们是相同的)。我想找出所有库存低的商品类型,其中低是该类型的商品剩余两个或更少。
这是我为此编写的代码,但执行需要 2 或 3 个小时,它没有给我正确的结果。我该如何解决这个问题?
public DataTable getLowStock()
{
DataTable dt = new DataTable();
object[,] arr=new object[1000000,4];
int index=0;
int rows;
rows = db.NumRows;
int[] IdArray;
IdArray = db.GetItemIDList(0, rows - 1);
string Category, Brand, Model, Condition, Location, Notes;
DateTime ReceivedDate, LastUpdated;
int Weight;
double PurchasePrice, SellingPrice;
for (int a = 0; a < IdArray.Length; a++)
{
Console.WriteLine(a);
db.GetItemRecord(IdArray[a], out Category, out Brand, out Model,
out ReceivedDate, out Weight, out Condition, out Location,
out PurchasePrice, out SellingPrice, out Notes, out LastUpdated);
if (a == 0)
{
arr[0, 0] = Category;
arr[0, 1] = Brand;
arr[0, 2] = Model;
arr[0, 3] = 1;
index++;
}
else
{
for (int i = 0; i < index; i++)
{
if ( ( arr[i,2].ToString()==Model)&& (arr[i,1].ToString()==Brand) && (arr[i,0].ToString()==Category ) )
{
arr[i, 3] = (Int32)arr[i, 3] + 1;
}
}
arr[index,0]=Category;
arr[index,1]=Brand;
arr[index,2]=Model;
arr[index, 3] = 1;
index++;
}
}
dt.Columns.Add("Category", typeof(string));
dt.Columns.Add("Model", typeof(string));
dt.Columns.Add("Brand", typeof(string));
dt.Columns.Add("count", typeof(int));
for (int i = 0; i < index; i++) {
Console.WriteLine("i="+i);
if((int)arr[i,3]<3){
dt.Rows.Add(arr[i,0].ToString(),arr[i,2].ToString(),arr[i,1].ToString(),(int)arr[i,3]);
}
}
return dt;
}
【问题讨论】:
-
(C#, dll)不是真正的数据库 - 你在用什么?大概是 SQL Server - 那么问题是:为什么您将所有数据加载到您的客户端以检测重复和/或低库存?这就是数据库的用途 - 在 (SQL) 服务器上! -
我可以通过查询轻松做到这一点,但这是一项任务。他们限制了 LINQ、绑定和数据源的使用。
-
我非常怀疑您是否能够显着加快您的处理速度......没有“神奇”的方法可以快速做到这一点 - 如果您需要在客户端上执行此操作 - 它只是需要时间。
标签: c# string object hashtable