繁体   English   中英

LinqToSql:当您还不知道数据库表时,如何读取数据?

[英]LinqToSql: How do you read data when you don't know the DB Table yet?

我过去一直在使用linq,并且知道如何使用SqlConnection和SqlCommand访问数据库。 今天,我想与LinqToSql合作 ,看看是否以及如何使从数据库的读取和写入变得更加容易。 我完成了演练。

这是客户类的代码(我做了一些修改,但仍然可以正常工作):

[Table(Name = "Customers")]
class Customer
{
    [Column(IsPrimaryKey = true)]
    public string CustomerID { get; set; }
    [Column]
    public string City { get; set; }
}

以及来自Main的代码:

class Program
{
    static void Main(string[] args) 
    {
        DataContext db = new DataContext(@"Data Source=(local)\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa;Password=xxx");
        Table<Customer> customers = db.GetTable<Customer>();

        IQueryable query = from cust in customers
                           //where cust.City == "London"
                           select cust;

        foreach (Customer customer in query)
            Console.WriteLine("ID:{0}; City={1}", customer.CustomerID, customer.City);
        Console.ReadKey();
    }
}

它工作正常,我很高兴,因为这使我访问数据库变得非常容易。 但是,还有几件事让我感到担忧:

  1. 似乎对于要包括的每个列,我都需要在Customer类中创建一个新属性 ,并在其上方添加一个[Column]。
  2. 我需要为要读取的每个表(例如Northwind DB中的Customer,Orders和Suppliers) 创建一个新的Class

首先,这似乎是很多不必要和重复的工作。 我在这里做错什么了吗?

另外,我希望用户输入数据库和表的名称。 这意味着我还不知道他将选择哪个数据库,我也不知道表的结构。 我还不能创建应该代表表的类。

这意味着我将需要:

  1. 动态创建类型/类/对象。 我不能使用Table<Customer> customers = db.GetTable<Customer>()因为我还不知道类型。 类型将是动态创建的类。
  2. 使用[Table(Name="xxx")]将类型/类/对象标记为表。
  3. 从SqlTable中读取列,并为每个列创建一个属性,并将其标记为[Column]。
  4. 完成此操作后,我可以使用Table<T> table = db.GetTable<T>()获得表,执行查询并显示数据行。

我的第二个(也是更重要的)问题是:我该怎么做? 有没有人可以分享代码示例或链接? 还是这种方法是错误的?

您可以像这样将结果存储在动态对象中。

dynamic table = db.GetTable<T>()

并使用反射来获取对象的类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM