0

我正在尝试尽可能多地使用 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() 方法来避免这种情况。我能想到的唯一一件事是数据库像这样动态连接,我必须以某种方式填充映射?

谢谢厄尼

4

1 回答 1

0

Linq-to-sql 需要一些代码来处理 ORM 功能——它适用于强类型类。

现在您选择一个随机数据库,因为没有可用的映射,因此没有结果。换句话说,随机数据库没有 DBML。

另一个语句只是简单的 SQL,因此它可以在任何随机数据库中工作,但它确实返回任何 stronly 类型的内容。

于 2013-04-13T09:57:42.233 回答