универсальный метод возвращает List <T>из базы данных - PullRequest
0 голосов
/ 29 декабря 2011

Предположим, у меня есть модель:

public class Person
{
public int ID {get;set;}
public string Name {get;set;}
}

И у меня есть таблица в базе данных:

person(integer ID, char Name)

Как я могу вернуть IEnumerable (или List) из базы данных в модели времени компиляции(Человек) неизвестно.Например, я думаю, что метод select должен иметь следующую структуру:

public List<object> Select(string query, Dictionary<string, object> parameters)
        {
            List<object> listValue = new List<object>();
            using (var command = new MySqlCommand(query, connection))
            {
                #region fill command.Parameters.AddWithValue
                if (parameters != null)
                {
                    foreach (var param in parameters)
                    {
                        if (param.Value == null)
                        {
                            command.Parameters.AddWithValue("@" + param.Key, DBNull.Value);
                            continue;
                        }
                        DateTime _date = new DateTime();
                        if (DateTime.TryParse(param.Value.ToString(), out _date))
                        {
                            command.Parameters.AddWithValue("@" + param.Key, _date.ToString("yyyy-MM-dd"));
                            continue;
                        }
                        command.Parameters.AddWithValue("@" + param.Key, param.Value);
                    }
                }
                #endregion

                if (connection.State == System.Data.ConnectionState.Closed) connection.Open();
                try
                {
                    using (MySqlDataReader reader = command.ExecuteReader(System.Data.CommandBehavior.CloseConnection))
                    {
                        while (reader.Read())
                        {
                            object newObject = new object();

                           // What must I do there?

                            listValue.Add(new { });
                        }
                    }
                }
                catch (Exception ex) { }
                finally
                {
                    if (connection.State == System.Data.ConnectionState.Open)
                        connection.Close();
                }
            }
            return listValue;
}

1 Ответ

0 голосов
/ 25 января 2012

Я думаю, что вам нужен новый аргумент, такой как 'Func', чтобы позволить invoker решить, как преобразовать данные из базы данных в сущность

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