我正在尝试尽可能多地使用 LINQ,所以我想弄清楚这一点。我可以使用 DataContext ExecuteQuery 方法获取用户选择的服务器/数据库中的表列表,但不使用 Mapping.GetTables() 枚举器。
这是我所拥有的(由 BackgroundWorker.RunWorkerAsync(args) 调用):
//Build the connection string (args contains the Server and database names)
Dictionary<string, string> args = (Dictionary<string, string>)e.Argument;
string ConnectString = "Data Source=" + args["SqlServerHolder"] + ";Integrated Security=True;Initial Catalog=" + args["SqlServerDatabaseHolder"];
//Get the connection and pull the list
using (SqlConnection con = new SqlConnection(ConnectString))
{
// Open connection
con.Open();
//create a linq connection and get the list of database names
DataContext dc = new DataContext(con);
//THIS WORKS
e.Result = new ObservableCollection<string>(dc.ExecuteQuery<string>("SELECT [name] FROM sysobjects WHERE xtype='U'").AsEnumerable());
//THIS COMES BACK EMPTY (tables)
IEnumerable<string> tables = (from mt in dc.Mapping.GetTables() select mt.TableName);
e.Result = new ObservableCollection<string>(tables);
}
运行硬编码查询是可行的,但我宁愿使用 GetTables() 方法来避免这种情况。我能想到的唯一一件事是数据库像这样动态连接,我必须以某种方式填充映射?
谢谢厄尼