Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LinqToSql:当您还不知道DB表时,如何读取数据?_C#_Linq_Linq To Sql - Fatal编程技术网

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

C# LinqToSql:当您还不知道DB表时,如何读取数据?,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,我过去已经在使用linq,我知道如何使用SqlConnection和SqlCommand访问数据库。今天,我想使用LinqToSql,看看是否以及如何使对数据库的读写更容易。我确实走了一遍 下面是Customer类的代码,我对它做了一些修改,但仍然可以很好地工作: [Table(Name = "Customers")] class Customer { [Column(IsPrimaryKey = true)] public string CustomerID { get; se

我过去已经在使用linq,我知道如何使用SqlConnection和SqlCommand访问数据库。今天,我想使用LinqToSql,看看是否以及如何使对数据库的读写更容易。我确实走了一遍

下面是Customer类的代码,我对它做了一些修改,但仍然可以很好地工作:

[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();
    }
}
它成功了,我很高兴,因为这让我访问数据库变得更加容易。但仍有几件事与我有关:

似乎对于我想要包含的每一列,我都需要在Customer类中创建一个新属性,并在上面添加一个[column]。 我需要为我想从Northwind DB中读取的每个表创建一个新类,例如Customer、Orders和Suppliers。 首先,这似乎是相当多的不必要和重复的工作。我做错什么了吗

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

这意味着我需要:

动态创建类型/类/对象。我不能使用Table customers=db.GetTable,因为我还不知道它的类型。该类型将是动态创建的类。 使用[TableName=xxx]将类型/类/对象标记为表。 从SqlTable中读取列,为每列创建一个属性,并用[column]标记。 完成此操作后,我可以获得table table=db.GetTable的表,执行查询并显示数据行。
我的第二个也是更重要的问题是:我如何才能做到这一点?有没有人可以分享代码示例或链接?还是这种做法是错误的

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

动态表=db.GetTable


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

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

动态表=db.GetTable


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

你看过整洁的衣服吗?你要做的是创建你自己的ORM。实体框架你看过Dapper吗?你要做的是创建你自己的ORM。实体框架做同样的事情