是否有可能使LinQ“理解”一个经典的SQL查询?

时间:2009-05-04 02:54:58

标签: .net sql linq linq-to-sql

是否可以使LinQ to SQL读取并理解纯SQL查询,如下所示?

SELECT * from myTable

我的老板让我直接在数据库中写入某个表中的纯SQL查询,例如,该表将有一个名为“typeOfSelect”的字段。

而且,在我的应用程序中,我将不得不阅读这个字段“typeOfSelect”并让LinQ了解这意味着什么。

谢谢!

3 个答案:

答案 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查询基础架构。