Использование словаря - PullRequest
       2

Использование словаря

0 голосов
/ 14 сентября 2010

Мне нужно написать скрипт, который объединяет список со словарем, чтобы создать третий словарь. Я довольно новичок в программировании и борюсь с основами здесь.

Пока что я создал следующий класс, который генерирует список дат. У меня есть другой класс, который генерирует словарь, и я хочу в основном создать третий словарь, который содержит даты и данные, которых еще нет в первом списке. Есть идеи, как мне это сделать? Спасибо.

class StartList: IDisposable
{
    private readonly string[] names = new[] { "name1", "name2", "name3"};

    private SqlConnection conn;
    private Dictionary<string, List<DateTime>> startData = new Dictionary<string, List<DateTime>>();

    public StartList()
    {
        this.conn = new SqlConnection(ConfigurationManager.ConnectionStrings["NameCon"].ConnectionString);
        this.conn.Open();
    }

    private void Dispose()
    {
        if (this.conn != null)
        {
            if (this.conn.State != ConnectionState.Closed)
            {
                try
                {
                    this.conn.Close();
                }
                catch
                {
                }
            }

            this.conn.Dispose();
            this.conn = null;
        }
    }

    public void ImportStartData()
    {
        foreach (string name in this.names)
        {
            this.startData.Add(name, this.ImportStartData(name));
        }
    }

    public List<DateTime> ImportStartData(string name)
    {
        List<DateTime> result = new List<DateTime>();

        string sqlCommand = string.Format("SELECT * FROM {0}_Index ", name);

        using (SqlCommand cmd = new SqlCommand(sqlCommand, this.conn))
        {
            cmd.CommandType = CommandType.Text;

            using (SqlDataReader reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    result.Add(reader.GetDateTime(0));
                }
            }

        }

        return result;
    }

}

1 Ответ

1 голос
/ 14 сентября 2010

Сначала вам необходимо изменить приведенный ниже кодовый блок. С:

 public void ImportStartData()
    {
        foreach (string name in this.names)
        {
            this.names.Add(name, this.ImportStartData(name));
        }
    }

До:

public void ImportStartData()
    {
        foreach (string name in this.names)
        {
            if(!startData.ContainsKey(name)) //If this check is not done, then Dictionary will throw, duplicate key exception.
            {
               this.startData.Add(name, this.ImportStartData(name));
            }
        }
    }

В любом случае, лучшим вариантом будет, если возможно, сначала прочитать имя , а также Дата из базы данных, возможно, в DataTable, а затем с помощью цикла LINQ / foreach сгруппируйте результаты по имени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...