是否可以使LinQ to SQL读取并理解纯SQL查询,如下所示?
SELECT * from myTable
我的老板让我直接在数据库中写入某个表中的纯SQL查询,例如,该表将有一个名为“typeOfSelect”的字段。
而且,在我的应用程序中,我将不得不阅读这个字段“typeOfSelect”并让LinQ了解这意味着什么。
谢谢!
答案 0 :(得分:3)
您可以在DataContext上使用ExecuteCommand和ExecuteQuery方法。
var db = new MyDataContext();
IEnumerable<Table1> result = db.ExecuteQuery<Table1>("SELECT * FROM Table1");
db.ExecuteCommand("UPDATE Tabel1 SET Column1 = 'Foo'");
ExecuteQuery将与任何具有与表的列名匹配的属性名的对象一起使用。 ExecuteCommand用于不返回结果集的SQL命令。
另一种方法是在DataContext上使用Connection.CreateCommand()方法,该方法将返回DbCommand对象。然后,只需使用要执行的SQL设置CommandText属性。
DbCommand command = myDataContext.Connection.CreateCommand();
command.CommandText = "SELECT * FROM Table1";
try {
command.Connection.Open();
DbDataReader reader = command.ExecuteReader();
// do something usefull with the reader like creating a DataTable
} finally {
command.Connection.Close();
command.Dispose();
}
您还可以查看此MSDN链接以了解其他一些示例。
答案 1 :(得分:2)
如果你想编写SQL,很容易创建一些包装类,所以你想写这样的东西。
DataTable result = DBManager.Query("SELECT * FROM Table");
但我不认为这通常被视为良好做法,并且会破坏Linq的目的。
答案 2 :(得分:2)
LINQ是微软将其服务器访问技术与更通用的便携式技术区分开来的手段。通过使程序员更容易实现“Microsoft Way”,他们获得了竞争优势。一旦你确信LINQ是通用的查询语法,除了关系数据库(这是主要目标,竞争非常薄)之外的适用性,他们对保持语言的完全控制有很强的兴趣(特别是因为它将与其他基础设施配合使用。)
我们将在此处了解“漏洞抽象”概念的表现。微软肯定拥有我认为是业界最忠诚的人,并且很多人都非常重视它。但这是100%的承诺 - 不回头。
这很像是否可以使用SQL来表达ISAM查询。有一次,正如我所听到的那样,IBM正以同样的半专有方式推动SQL查询基础架构。