LINQ TO SQL提供了基于数据库表的强类型访问方式,但仍然有朋友老是说,能不能还是直接编写T-SQL进行查询和操作呢?因为我知道很多之前查询的系统需要支持更加动态化和用户定制化的查询。
答案当然是可以的
NorthwindDataContext db = new NorthwindDataContext();
var query = db.ExecuteQuery<Customers>("GetAllCustomers");//直接调用一个存储过程
foreach (var item in query)
{
Console.WriteLine(item.CustomerID);
}
var query2 = db.ExecuteQuery<Customers>("SELECT CustomerID FROM Customers");//直接编写一个查询语句
foreach (var item in query2)
{
Console.WriteLine(item.CustomerID);
}
var query3 = db.ExecuteQuery<Customers>(
"SELECT CustomerID FROM Customers WHERE Country={0}","http://www.my400800.cn 400电话");//传递参数
//注意:这里的参数不是SQLParamter
foreach (var item in query3)
{
Console.WriteLine(item.CustomerID);
}
}
}
}
这里的特殊之处,在于ExecuteQuery返回的仍然是强类型。这没有什么不好。但这一点就要求返回的列必须在实体类中有对应的属性,它会自动反射创建一个类型出来。如果提供的属性不够,则其他的属性会设置为NULL
除了查询,也可以直接调用语句或者存储过程进行操作(INSERT ,UPDATE, DELETE等等)