Как заставить метод заполнять список значениями из разных таблиц и полей в одном списке? - PullRequest
0 голосов
/ 22 марта 2019

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

cntDB = new ContextDB();
 List<List<string>> lst_List = new List<List<string>>();
 public void Method_2(string nameTable, string nameField)
        {
            var phones = cntDB.Database.ExecuteSqlCommand("SELECT " + nameField + " FROM " + nameTable); // +-
            lst_List.AddRange(phones.ToList());
        }

Какзаставить метод заполнять список значениями из разных таблиц и полей в одном списке?

Ответы [ 3 ]

2 голосов
/ 22 марта 2019

ExecuteSqlCommand возвращает int, а не набор результатов, и используется главным образом для команд, не связанных с SELECT (например, INSERT, UPDATE, DELETE).Вместо этого используйте SqlQuery:

cntDB = new ContextDB();
 List<string> lst_List = new List<string>();
 public void Method_2(string nameTable, string nameField)
        {
            var lst_List = cntDB.Database.SqlQuery<string>("SELECT " + nameField + " FROM " + nameTable).ToList();
        }

Вы не получите List<List<string>> таким образом, но я не вижу, как вы будете заполнять этот тип из одного плоского запроса в соответствии с оператором SQL?

1 голос
/ 22 марта 2019

Если я правильно понял, вы бы хотели заполнить список различными записями в зависимости от имени и таблицы.

Учитывая метод, с помощью которого вы пытаетесь это сделать, я бы создал класс:

    private class DbTable
    {
        public string Name { get; set; }
        public List<string> Fields;
    }

Теперь Вы можете изменить свой метод так, чтобы он брал список объектов DbTable.

    public void Method_2(List<DbTable> tables)
    {
        foreach (var table in tables)
        {
            foreach (var field in table.Fields)
            {
                var phones = cntDB.Database.ExecuteSqlCommand("SELECT " + field + " FROM " + table.Name); // +-
                lst_List.AddRange(phones.ToList());
            }
        }
    }

Вам нужно создать список, который Вы хотите передать методу

        var tablesList = new List<DbTable>();
        var dbTable = new DbTable();
        dbTable.Name = "MyTableName";
        dbTable.Fields = new List<string>
        {
            "FirstField",
            "SecondField"
        };
        tablesList.Add(dbTable);
0 голосов
/ 22 марта 2019

Я думаю, что было бы проще использовать LINQ:

var list = new List<List<string>>();
var FieldName1Rows = cntDB.TableName1.Select(x => x.FieldName1.ToString()).ToList();
list.Add(FieldName1Rows);
var FieldName2Rows = cntDB.TableName2.Select(x => x.FieldName2.ToString()).ToList();
list.Add(FieldName2Rows);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...