我想制作一种方法,用来自各个表和字段的行填充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());
}
如何使方法用一个列表中的不同表和字段中的值填充列表?
答案 0 :(得分:2)
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 :(得分:1)
如果我理解正确,那么您将根据给定的名称和表使用不同的条目填充列表。
鉴于您尝试使用的方法,我将创建一个类:
private class DbTable
{
public string Name { get; set; }
public List<string> Fields;
}
现在,您可以修改您的方法以获取DbTable对象的List。
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);
答案 2 :(得分:-1)
我认为使用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);