【问题标题】:Retrieve and print data from dynamic sql query with linq使用 linq 从动态 sql 查询中检索和打印数据
【发布时间】:2009-01-25 02:32:47
【问题描述】:

我有一些现有代码使用 ADO.NET 从数据库中检索数据,我想将其转换为 linq。

代码所做的是通过命令行接收 SQL 查询,执行它,返回行及其列名,然后将它们打印到屏幕上。我想知道如何在 linq 中编写此代码。

整个 sql 查询必须通过命令行给出,因为我想限制从哪里选择行。这是我希望它完成的唯一方法,所以除非你有一种可以这样工作的方法,否则我不能使用它。除了我自己之外,没有人可以访问该程序,因此安全性不是问题。

private static SqlConnection sqlConnection = new SqlConnection();

private static void OConnection()
{
    sqlConnection = new SqlConnection();
    sqlConnection.ConnectionString = MyConsoleApp.Properties.Settings.Default.ConnStr;
    sqlConnection.Open();
}

...

string query = Console.ReadLine();
OpenConn();
SqlCommand command = new SqlCommand(query, sqlConnection);
SqlDataReader reader = command.ExecuteReader();

if (reader != null)
{
    while (reader.Read())
    {
        for (int i = 0; i < reader.FieldCount; i++)
        {
            Console.Write("| {0}: {1}", reader.GetName(i), reader.GetValue(i));
        }
        Console.WriteLine();
    }
}

【问题讨论】:

    标签: c# sql linq


    【解决方案1】:

    我在这里看不到迁移到 LINQ 的价值。 LINQ 的美妙之处在于您可以使用域对象的语言而不是 T-SQL 来编写查询。在您的情况下,您只想接受实际的 SQL 命令。似乎解构命令,将其转换为 LINQ(使用反射来识别数据上下文中的适当表),然后执行查询以打印出结果对象的属性似乎会做更多的工作。

    【讨论】:

      【解决方案2】:

      您可以将存储过程添加到数据库中,然后将它们添加到 linq。 Linq 提供了很好的代码生成来处理您的存储过程使用延迟执行获取和返回行。

      如果您希望执行一个不是存储过程的动态查询,那么您将需要坚持使用 ADO.Net 或学习如何在 LINQ 中表达您的查询。也许如果您提供查询,我们可以帮助您使用数据上下文执行此操作。

      PS。当我们迁移到 LINQ 时,我发现我们必须编写的样板 ADO.Net 代码的数量急剧下降。我写了我的 SPRoc 将它映射到 sql 并立即使用它:)。

      【讨论】:

        【解决方案3】:

        Scott Gu 的 Dynamic LINQ 可以在 here 找到,但正如 tvanfosson 已经说过的那样,迁移到 Linq 并不会解决太多问题,而且很可能需要付出更多的努力。

        【讨论】:

          猜你喜欢
          • 2010-09-08
          • 1970-01-01
          • 2021-01-05
          • 2018-04-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-21
          • 1970-01-01
          相关资源
          最近更新 更多