Я пытаюсь получить несколько наборов записей из хранимой процедуры. Первый набор возвращаемых записей представляет собой таблицу сопоставления. Он содержит один столбец с несколькими строками, как показано ниже:
Клиент
Персонал
Продавец
Эти имена будут использоваться в качестве модели в окне отображения, чтобы отобразить последующий результат, как указано в .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; }
}