C# 从DataTable-C中的DataRows中选择并提取值
我有一个接受这些参数的方法:C# 从DataTable-C中的DataRows中选择并提取值,c#,datatable,C#,Datatable,我有一个接受这些参数的方法: public bool CalculateProvent(ArrayList UPs, ArrayList DateExtraction, DataTable SourceData { ... ... } SourceData datatable包含以下内容,例如: UP - DateExtraction - Energy1 - Energy
public bool CalculateProvent(ArrayList UPs,
ArrayList DateExtraction,
DataTable SourceData
{
...
...
}
SourceData datatable包含以下内容,例如:
UP - DateExtraction - Energy1 - Energy2 - Consumption1 - Consumption2 - etc
Decimal myEnergy1, myEnergy2, myConsumption1, myConsumption2
foreach(int up in UPs)
{
foreach(DateTime myTime in DateExtraction)
{
// Here I have to select the correct row and extract my fields
}
}
有一些价值观:
780 - 2011-11-12 14:00:00 - 30.50 - NULL - NULL - 12.00
780 - 2011-11-12 15:00:00 - 31.50 - NULL - 10 - 12.00
781 - 2011-11-12 14:00:00 - NULL - 6 - NULL - 12.00
...
我必须基于UPs和DataExtraction arraylist迭代此datatable,以提取所需的字段值Energy1,等等
例如:
UP - DateExtraction - Energy1 - Energy2 - Consumption1 - Consumption2 - etc
Decimal myEnergy1, myEnergy2, myConsumption1, myConsumption2
foreach(int up in UPs)
{
foreach(DateTime myTime in DateExtraction)
{
// Here I have to select the correct row and extract my fields
}
}
如何在此迭代中选择正确的值?尝试以下方法:
foreach(int up in UPs)
{
foreach(DateTime myTime in DateExtraction)
{
DataRow[] myRows = SourceData.Select("UP=" + up + " AND DateExtraction='" + myTime.ToString() + "'");
if(myRows != null && myRows.Length == 1)
{
// here is your row... myRows[0]
}
}
}
当然,应该改进并注意myTime.ToString格式。当然,这也可以通过使用漂亮、紧凑的LINQ数据集来实现,我想这样的东西可能正是您想要的
var q = from up in UPs.Cast<int>()
from myTime in DateExtraction.Cast<DateTime>()
join r in SourceData.AsEnumerable() on
new { r.Field<int>("UP"), r.Field<DateTime>("DateExtraction")} equals
new { up, myTime }
select new
{
Energy1 = r.Field<Decimal>("Energy1"),
Energy2 = r.Field<Decimal>("Energy2")
};
你为什么以{$Detity}的名义使用ArrayList?你没有解释正确的行是什么以及如何找到它。你能告诉我们从数据库读取数据的代码部分吗?