C# LinqToSql:当您还不知道DB表时,如何读取数据?
我过去已经在使用linq,我知道如何使用SqlConnection和SqlCommand访问数据库。今天,我想使用LinqToSql,看看是否以及如何使对数据库的读写更容易。我确实走了一遍 下面是Customer类的代码,我对它做了一些修改,但仍然可以很好地工作: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
[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。实体框架做同样的事情