Чёткое типизированное отображение для нескольких наборов результатов в C# - PullRequest
0 голосов
/ 26 апреля 2020

Я пытаюсь получить несколько наборов записей из хранимой процедуры. Первый набор возвращаемых записей представляет собой таблицу сопоставления. Он содержит один столбец с несколькими строками, как показано ниже:
Клиент
Персонал
Продавец

Эти имена будут использоваться в качестве модели в окне отображения, чтобы отобразить последующий результат, как указано в .Read<XXX>(), где XXX может быть «Клиент», «Персонал» или «Продавец».

У меня есть созданная модель для "Customer", "Staff" и "Vendor".

Проблема здесь в том, что я не хочу писать оператор if-else, чтобы проверить, равен ли tableName «Клиент», и используйте .Read<Customer>(). Если tableName равно "Staff", тогда используйте .Read<Staff>().

Я хочу сделать его максимально динамичным c (возможно, всего с одной строкой кода), используя tableName в качестве .Read<tableName>(). Однако это кажется невозможным.

У кого-нибудь есть идеи, как достичь этой цели? Я поделился своим примером кода ниже, очень ценю вашу помощь. Большое спасибо.

    class Program
    {
        static void Main(string[] args)
        {
            using (var connection = new SqlConnection("Connection string"))
            {
                var ds = new List<dynamic>();
                var results = connection.QueryMultiple("Stored Procedure", null, commandType: CommandType.StoredProcedure);
                var mappingTable = results.Read<TableMapping>(); // get the mapping table

                foreach (var row in mappingTable)
                {
                    var tableName = row.TableName;

                    while(!results.IsConsumed)
                    {
                        ds.Add(results.Read<tableName>());
                    }
                }
            }
        }
    }

    class TableMapping
    {
        public string TableName { get; set; }
    }
...