8,497
社区成员
发帖
与我相关
我的任务
分享
static void Main(string[] args)
{
DataTable dt1 = GetTable();
DataTable dt2 = GetTable();
int listCount = 10000;
Random random = new Random();
for (int i = 1; i <= listCount; i++)
{
DataRow row = dt1.NewRow();
row["Warehouse"] = "100" + random.Next(2).ToString();
row["storage"] = "100" + random.Next(3).ToString();
row["MaterialCode"] = i.ToString();
row["Qty"] = random.Next(10);
row["WayQty"] = 10;
//row["WayQty"] = random.Next(1);
dt1.Rows.Add(row);
}
Random random1 = new Random();
for (int i = 1; i <= listCount; i++)
{
DataRow row = dt2.NewRow();
row["Warehouse"] = "100" + random1.Next(2).ToString();
row["storage"] = "100" + random1.Next(3).ToString();
row["MaterialCode"] = i.ToString();
row["Qty"] = random1.Next(10);
row["WayQty"] = 10;
//row["WayQty"] = random1.Next(1);
dt2.Rows.Add(row);
}
//Linq的测试方式
Stopwatch linq_Stopwatch = new Stopwatch();
linq_Stopwatch.Start();
var linqList = from a in dt1.AsEnumerable()
join s in dt2.AsEnumerable() on a.Field<string>("Warehouse") equals s.Field<string>("Warehouse")
where a.Field<string>("storage").Equals(s.Field<string>("storage"))
&& a.Field<string>("MaterialCode").Equals(s.Field<string>("MaterialCode"))
&& (
a.Field<int>("Qty") == s.Field<int>("Qty")
|| a.Field<int>("WayQty") == s.Field<int>("WayQty")
)
select a;
int count = linqList.Count();
linq_Stopwatch.Stop();
}
static DataTable GetTable()
{
DataTable dt = new DataTable();
DataColumn col1 = new DataColumn("Warehouse", typeof(string));
DataColumn col2 = new DataColumn("storage", typeof(string));
DataColumn col3 = new DataColumn("MaterialCode", typeof(string));
DataColumn col4 = new DataColumn("Qty", typeof(int));
DataColumn col5 = new DataColumn("WayQty", typeof(int));
dt.Columns.Add(col1);
dt.Columns.Add(col2);
dt.Columns.Add(col3);
dt.Columns.Add(col4);
dt.Columns.Add(col5);
return dt;
}