public class DataTableTest
{
private int dataCount = 10;
private DataTable dt = new DataTable();
public DataTableTest(int initCount = 10)
{
dataCount = initCount;
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("CardNo", typeof(string));
dt.PrimaryKey = new DataColumn[]
{
dt.Columns["CardNo"], //设置主键,可以显著提高Select效率
//dt.Columns["Id"], //可以设置其他主键
};
for (int i = 0; i < dataCount; i++)
{
var dr = dt.NewRow();
dr["id"] = i + 1;
dr["CardNo"] = i + "A";
dt.Rows.Add(dr);
}
}
public int GetByForeach()
{
var count = 0;
foreach ( DataRow item in dt.Rows)
{
//if ((int) item["Id"] > 10) count++;
if (item["CardNo"].ToString() == "10000A") count++;
}
return count;
}
public int GetByLinq()
{
var list = (from item in dt.AsEnumerable()
//where item.Field<int>("Id") > 10
where item.Field<string>("CardNo") == "10000A"
select item).ToList();
return list?.Count ?? 0;
}
public int GetBySelect()
{
//var ret = dt.Select("Id > 10");
var cardNo = "10000A";
var ret = dt.Select("CardNo ='" + cardNo + "'");
return ret.Length;
}
static void Main(string[] args)
{
var ret = 0;
Stopwatch sw = new Stopwatch();
var dtTest = new DataTableTest(200000);
sw.Start();
ret = dtTest.GetByForeach();
sw.Stop();
Console.WriteLine("GetByForeach: ret=" + ret + ", " + sw.Elapsed.TotalMilliseconds);
sw.Reset();
sw.Start();
ret = dtTest.GetByLinq();
sw.Stop();
Console.WriteLine("GetByLinq: ret=" + ret + ", " + sw.Elapsed.TotalMilliseconds);
sw.Reset();
sw.Start();
ret = dtTest.GetBySelect();
sw.Stop();
Console.WriteLine("GetBySelect: ret=" + ret + ", " + sw.Elapsed.TotalMilliseconds);
Console.Read();
}