我过去一直在使用linq,我知道如何使用SqlConnection和SqlCommand访问数据库。今天,我想与 LinqToSql 一起使用,看看是否以及如何使从数据库的读取和写入变得更加容易。我做了this演练。
这是客户类的代码(我做了一些修改,但仍然可以正常使用):
[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();
}
}
它工作正常,我很高兴,因为这使我访问数据库变得非常容易。但是,还有几件事让我感到关注:
首先,这似乎是很多不必要的重复性工作。我在这里做错什么了吗?
我还希望用户输入数据库和表的名称。这意味着我还不知道他将选择哪个数据库,我也不知道表的结构。我还不能创建应该代表表格的类。
这意味着我将需要:
Table<Customer> customers = db.GetTable<Customer>()
,因为我还不知道类型。类型将是动态创建的类。[Table(Name="xxx")]
将类型/类/对象标记为表。Table<T> table = db.GetTable<T>()
获取表,执行查询并显示数据行。我的第二个(也是更重要的问题)是:我该怎么做?有没有人可以分享代码示例或链接?还是这种方法错误?
答案 0 :(得分:0)
您可以像这样将结果存储在动态对象中。
dynamic table = db.GetTable<T>()
并使用反射来获取对象的类型。