簡體   English   中英

使用數據庫中的鍵和值創建數組

[英]Create an Array with Keys and Values from database

我需要在代碼中執行此操作;

  1. 從數據庫的2列中獲取數據(laborer和trx_date)
  2. 將提取的數據放入數據表
  3. 展開數據表中的第一列
  4. 將exploded_laborer和trx_date放置到一個數組

     key->exploded_laborer exploded=>trx_date 

我能夠到達3號,我只需要做4號。我的代碼如下:

private void GetLocalData()
{
    const string sql = @"SELECT laborer, trx_date from tbl_jobs WHERE trx_date BETWEEN @fromDate AND @toDate";
    var laborerDataTable = new DataTable();
    using (var conn = new SqliteAccess().ConnectToSqlite())
    {
        using (var cmd = new SQLiteCommand(sql, conn))
        {
            conn.Open();
            cmd.Parameters.AddWithValue("@fromDate", dtpFrom.Value.ToString("yyyy-MM-dd"));
            cmd.Parameters.AddWithValue("@toDate", dtpTo.Value.ToString("yyyy-MM-dd"));
            laborerDataTable.Load(cmd.ExecuteReader());
        }
    }
    var exploded = new List<string>();
    foreach (DataRow row in laborerDataTable.Rows)
    {

        exploded.Add(row["laborer"].ToString().Split('|')[0]);
    }
}

非常感激你的幫助。

我認為您應該創建Dictionary<TKey,TValue> ,它表示鍵和值的集合。 這可能為您解決問題

laborerDataTable.AsEnumerable()
                .Select(row => laborerDataTable.Columns.Cast<DataColumn>()
                        .ToDictionary(column => row[laborer] as string
                                      column => row[trx_date] as string))

因此完整的代碼可能看起來像

private void GetLocalData()
{
    const string sql = @"SELECT laborer, trx_date from tbl_jobs WHERE trx_date BETWEEN @fromDate AND @toDate";
    var laborerDataTable = new DataTable();
    using (var conn = new SqliteAccess().ConnectToSqlite())
    {
        using (var cmd = new SQLiteCommand(sql, conn))
        {
            conn.Open();
            cmd.Parameters.AddWithValue("@fromDate", dtpFrom.Value.ToString("yyyy-MM-dd"));
            cmd.Parameters.AddWithValue("@toDate", dtpTo.Value.ToString("yyyy-MM-dd"));
            laborerDataTable.Load(cmd.ExecuteReader());
        }
    }
    var LabDict = laborerDataTable.AsEnumerable()
                .Select(row => laborerDataTable.Columns.Cast<DataColumn>()
                        .ToDictionary(column => row[laborer] as string
                                      column => row[trx_date] as string))
}

編輯

這只是創建一個虛擬表。

static DataTable GetTable()
{
    // Here we create a DataTable with four columns.
    DataTable table = new DataTable();
    table.Columns.Add("laborer", typeof(string));
    table.Columns.Add("trx_date", typeof(string));

    // Here we add five DataRows.
    table.Rows.Add("Indocin", "12/12/2010");
    table.Rows.Add("Enebrel", "12/1/2011");
    table.Rows.Add("Hydralazine", "1/12/2012");
    table.Rows.Add("Combivent", "11/12/2013");
    table.Rows.Add("Dilantin", "12/11/2014");

    return table;
}

普通的C#核心方式

DataTable laborerDataTable = GetTable(); 
Dictionary<string, string> exploded = new Dictionary<string, string>();
foreach(DataRow row in laborerDataTable.Rows)
{
    exploded.Add(row.Field<string>(0), row.Field<string>(1));
}

另外,如何將每一行打印到控制台?

foreach(var dct in exploded)
{
    Console.WriteLine(dct.Key + " Date is " + dct.Value);
}

如果期望將結果作為鍵值對,那么為什么要使用數組? 為什么不使用Dictionary<string, string>呢? 您可以嘗試這樣的事情:

 Dictionary<string, string> laborerDict = laborerDataTable.AsEnumerable()
                                                          .ToDictionary(x => x.Field<string>("laborer"), 
                                                                        x => x.Field<string>("trx_date"));

在Java中的內置HashMap中使用時,請參考下面的代碼HashMap map = new HashMap <>(); Map.put(鍵,值); 要從地圖獲取數據,請使用Map.get(key),它具有很多功能,也許您可​​以通過搜索Java API來引用它們

當您想讓Key => Value更好時,可以使用Dictionary而不是List

var exploded = new Dictionary<string,string>();
foreach (DataRow row in laborerDataTable.Rows)
{
 exploded.Add(row["laborer"].ToString(),(row["trx_date"].ToString());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM