Универсальный поиск по базе данных - PullRequest
0 голосов
/ 31 декабря 2018

Я пытаюсь создать метод, который возвращает ObservableCollection, предоставляя тип объекта и имя таблицы.

Метод должен использовать эту информацию для создания коллекции ObservableCollection, которая извлекает все строки из таблицы и помещает ее в предыдущую коллекцию ObservableCollection с требуемым типом объекта.

public class DatabaseManager
{
    public async Task<ObservableCollection<object>> GetObjectsAsync(object object_name, string table_name)
    {
        Type type = object_name.GetType();
        IList<PropertyInfo> props = new List<PropertyInfo>(type.GetProperties());
        ObservableCollection<object> oc = new ObservableCollection<object>();

        using (SqlConnection conn = new SqlConnection(Constants.ConnectionString))
        {
            await conn.OpenAsync();
            using (SqlCommand cmd = conn.CreateCommand())
            {
                cmd.CommandText = "select * from " + table_name;

                using (SqlDataReader reader = await cmd.ExecuteReaderAsync())
                {
                    while (await reader.ReadAsync())
                    {
                        object x = new object();

                        foreach (PropertyInfo prop in props)
                        {
                            // I want to create a universal object that i can add to my observable collection here.
                            object propValue = prop.GetValue(object_name, null);

                            // Code Here
                        }

                        oc.Add(x);
                    }
                }
            }
        }

        return oc;
    }
}

Цель состоит в том, чтобы создатьметод для получения ObservableCollection из таблицы базы данных с не конкретным типом объекта.

Я был бы признателен за любую помощь / рекомендации, я мог бы ошибиться, как это сделать, но если это вообще возможнопожалуйста, скажите мне.

1 Ответ

0 голосов
/ 31 декабря 2018

C # - статически типизированный язык, поэтому обычно вы не можете построить объект, не зная его типа.Другими словами, когда вы делаете это

object x = new object();

, вы буквально получаете объект типа System.Object без дополнительных свойств.

Существует два способа обойти это:

  • Используйте dynamic и ExpandoObject - это позволит вам добавлять свойства на лету, но полученные объекты необходимо будет использовать как dynamic или
  • Возьмите тип объекта, который будет создан запросом - ваш код может «связать» имя таблицы с объектами, хранящимися в таблице.Если вы решите пойти по этому пути, подумайте об использовании облегченной библиотеки ORM, такой как StackExchange Dapper .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...