我写了一个程序,它工作正常。但事实是,它需要花费很多时间来处理。 我在数据表中拥有数百万个数据。所以真的很难等到这个过程完成。我听说过LinQ方法。但我对此并不熟悉。任何人都可以帮我加速我的代码。
foreach (var ch in lsCh)
{
foreach (var dt in lsDt)
{
foreach (var cs in lsCs)
{
DataRow[] result = Dtsrc.Select("Channel = '" + ch.ToString() + "' AND Date = '" + dt.ToString() + "' AND CPSTime = '" + cs + "'");
if (result.Length > 0)
{
//Some calculation
}
Dtsrc.AcceptChanges();
}
}
}
答案 0 :(得分:1)
由于DataColumns和列表的类型不明确,您可能需要相应地更改它们。但也许这显示了一种更有效的方式:
我会使用HashSet<T>
代替List<T>
。如果您无法更改类型,则可以通过将列表传递给构造函数来创建实例:
var setCh = new HashSet<int>(lsCh);
var setDt = new HashSet<DateTime>(lsDt);
var setCs = new HashSet<DateTime>(lsCs);
现在这个查询应该更有效率:
var rowsToProcess = Dtsrc.AsEnumerable()
.Where(r => setCh.Contains(r.Field<int>("Channel")) && setDt.Contains(r.Field<DateTime>("Date")) && setCs.Contains(r.Field<DateTime>("CPSTime")));
foreach (DataRow row in rowsToProcess)
{
//Some calculation
}