2014-10-17 5 views
0

В «ADO.NET Entity Data Model» я создал модель «база данных сначала» из нескольких таблиц. Все таблицы имеют поля «code» и «name» и различные другие поля. Затем я создал объект «context». Теперь я хочу создать переменную «src_table», которая будет назначена context.table1 или context.table2 и т. Д. Условно, а затем работать с свойствами src_table.code и src_table.name.Определить тип переменной условно C#

код, как это работает отлично:

var context = new postgresEntities(); 
var src_table = context.table1; 
foreach (var src_table_rec in src_table) 
{ 
    Console.WriteLine("Code: {0}, Name: {1}", src_table_rec.code, src_table_rec.name); 
} 

Или это:

var context = new postgresEntities(); 
var src_table = context.table2; 
foreach (var src_table_rec in src_table) 
{ 
    Console.WriteLine("Code: {0}, Name: {1}", src_table_rec.code, src_table_rec.name); 
} 

Но я понятия не имею, как дать возможность выбрать таблицу:

var context = new postgresEntities(); 

Console.WriteLine("Enter the table number:"); 
string response = Console.ReadLine(); 
int n; 
bool isNumeric = int.TryParse(response, out n); 

if (isNumeric && n==1) 
{ 
    var src_table = context.table1; 
} 
else if (isNumeric && n==2) 
{ 
    var src_table = context.table2; 
} 
else 
{ 
    Console.WriteLine("Table number {0} doesn't exist.", n); 
} 

foreach (var src_table_rec in src_table) 
{ 
    Console.WriteLine("Code: {0}, Name: {1}", src_table_rec.code, src_table_rec.name); 
} 

Есть ли способ сделать это?

+0

Вы можете использовать 'тип dynamic', но я не уверен, что это вы пытаетесь достичь здесь? – DavidG

+0

Не знаю, что вы пытаетесь сделать, но вам нужно объявить src_table вне вашего if – artm

+0

. Вы пытаетесь ссылаться на переменную за пределами ее области действия, которая просто не работает. То, что я думаю, что вы пытаетесь сделать, достигается посредством наследования, интерфейсов, отражения или 'dynamic', а не' var'. – svinja

ответ

1

Один из вариантов - определить абстракции и использовать их, когда вам нужно получить доступ к таблице.

public interface ITable { 
    string code { get; set; } 
    string name { get; set; } 
} 

Реализовать интерфейсы таблиц

public class Table1: ITable { 
    public string code { get; set; } 
    public string name { get; set; } 
} 

public class Table2: ITable { 
    public string code { get; set; } 
    public string name { get; set; } 
} 

и использовать их

var context = new postgresEntities(); 

Console.WriteLine("Enter the table number:"); 
string response = Console.ReadLine(); 
int n; 
bool isNumeric = int.TryParse(response, out n); 

ITable src_table = null; 

if (isNumeric && n==1) { 
    src_table = context.table1; 
} else if (isNumeric && n==2) { 
    src_table = context.table2; 
} else { 
    Console.WriteLine("Table number {0} doesn't exist.", n); 
} 

Console.WriteLine("Code: {0}, Name: {1}", src_table.code, src_table.name); 
Смежные вопросы