簡體   English   中英

如何將多個值添加到單個鍵(c# 中的字典)

[英]How to add multiple values to a single key (Dictionaries in c#)

在這里,我從數據庫中檢索休假類型和休假資料。 每個 leave_type 可能有多個配置文件。 因此,我將休假類型設置為鍵,將個人資料設置為值。 當我運行我的代碼時,我得到一個異常,上面寫着:“已經添加了具有相同鍵的項目。” 請幫忙

Dictionary<String, String> myDictionary = new Dictionary<String, String>();
            List<String[]> leave_result_list = new List<String[]>();
            StringBuilder leave_builder = new StringBuilder();`

            MySqlCommand leave_type_query = new MySqlCommand("SELECT leave_types.description, leave_profile.name FROM leave_types LEFT JOIN leave_profile on leave_types.type_id = leave_profile.leave_type_id", con);

            MySqlDataReader leave_type_reader = leave_type_query.ExecuteReader();
            while (leave_type_reader.Read())
            {
                string[] leave_type_and_profiles = new string[2];
                leave_type_and_profiles[0] = leave_type_reader.GetString("description");
                leave_type_and_profiles[1] = leave_type_reader.GetString("name");
                string leave_name = leave_type_and_profiles[0].ToString();
                string leave_profile = leave_type_and_profiles[1].ToString();
                myDictionary.Add(leave_name, leave_profile);
            }

            leave_type_reader.Close();

我會改用Lookup ,它像字典一樣工作,但有一組值。

void Main()
{
    var lookup = GetTheStuff().ToLookup(x => x.leave_name, x => x.leave_profile)
}

private IEnumerable<(string leave_name, string leave_profile)> GetTheStuff()
{
    MySqlCommand leave_type_query = new MySqlCommand("SELECT leave_types.description, leave_profile.name FROM leave_types LEFT JOIN leave_profile on leave_types.type_id = leave_profile.leave_type_id", con);
    MySqlDataReader leave_type_reader = leave_type_query.ExecuteReader();
    
    while (leave_type_reader.Read())
    {
        string[] leave_type_and_profiles = new string[2];
        leave_type_and_profiles[0] = leave_type_reader.GetString("description");
        leave_type_and_profiles[1] = leave_type_reader.GetString("name");
        string leave_name = leave_type_and_profiles[0].ToString();
        string leave_profile = leave_type_and_profiles[1].ToString();
        yield return (leave_name, leave_profile)
    }

    leave_type_reader.Close();
}

每個 leave_type 可能有多個配置文件

您最好使用Dictionary<string, List<string>>然后:

var myDictionary = new Dictionary<string, List<string>>();

while (leave_type_reader.Read())
{
    // ...
    if(myDictionary.TryGetValue(leave_name, out List<string> profiles))
        profiles.Add(leave_profile);
    else
        myDictionary.Add(leave_name, new List<string>{ leave_profile });
}

暫無
暫無

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

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