DataTable 搜索具有行值的行

DataTable searching a row with row value

我需要对属于今天日期的行中的 4 列中的数据求和。

Tarih 列是通用格式化数据列。 (44574 是通用格式的今天日期。)

这是我的 table:

Tarih |Pres1Hedef|Pres2Hedef|Pres3Hedef|Pres4Hedef
------+-----------+---------+----------+-----------
44561 | 142      | 145      |  154     |  114
44562 | 120      | 110      |  114     |  110
44563 | 110      | 170      |  115     |  143
44564 | 110      | 130      |  146     |  154
44565 | 110      | 200      |  171     |  110
44566 | 110      | 214      |  201     |  204
44567 | 100      | 150      |  174     |  143

这是我的源代码:

OleDbConnection excelBag = new OleDbConnection(excelAyar.ConnectionString); excelBag.Open();
OleDbDataAdapter adap = new OleDbDataAdapter("SELECT F2 as Tarih,F32 as Pres1Hedef,F34 as Pres2Hedef,F36 as Pres3Hedef,F38 as Pres4Hedef FROM [" + excelSayfaAdi + "$]", excelBag);
DataTable dt = new DataTable(); adap.Fill(dt);
dataGridView1.DataSource = dt;

string Gun1HedefPres1 = dt.Rows[9]["Pres1Hedef"].ToString();
string Gun1HedefPres2 = dt.Rows[9]["Pres2Hedef"].ToString();
string Gun1HedefPres3 = dt.Rows[9]["Pres3Hedef"].ToString();
string Gun1HedefPres4 = dt.Rows[9]["Pres4Hedef"].ToString();
double Gun1Hedef = Convert.ToDouble(Gun1HedefPres2) + Convert.ToDouble(Gun1HedefPres1) + Convert.ToDouble(Gun1HedefPres3) + Convert.ToDouble(Gun1HedefPres4);
textBox1.Text = Convert.ToInt32(Gun1Hedef).ToString();

我想做的是找到这样的值(查找具有行值的值,而不是行索引):

string Gun1HedefPres1 = dt.Rows["Tarih : 44561].["Pres1Hedef"];

我知道没有上面这样的东西。但是我怎样才能做我想做的事呢?

有什么建议吗?谢谢

DataTable class 有一个 Select method 允许您像 SQL 中的 WHERE 语句一样传递条件。方法 returns 符合条件的 DataRow 数组(零个或多个)。

根据生成的 DataRows 数组,您可以轻松地进行数学运算。

   double Gun1Hedef = 0.0;
   string valueToSearchFor = "44561"; // Get this from your inputs

   var rows = dt.Select($"Tarih = {valueToSearchFor}");

   // Assuming that you have only one row with  valueToSearchFor,
   // otherwise you need a loop over the rows array
   if(rows.Length == 1)
   {
       // Field<T> is an extension method available from 
       // DataSetExtensions assembly, you need a reference 
       Gun1Hedef += rows[0].Field<double>("Pres1Hedef");
       Gun1Hedef += rows[0].Field<double>("Pres2Hedef");
       Gun1Hedef += rows[0].Field<double>("Pres3Hedef");
       Gun1Hedef += rows[0].Field<double>("Pres4Hedef");
   }

请注意,这假设 Terih 字段是某种数字类型。如果不是,我们需要为日期或字符串应用不同的条件。