【问题标题】:How can I run a SQL query in C# statement/program with Linqpad?如何使用 Linqpad 在 C# 语句/程序中运行 SQL 查询?
【发布时间】:2017-08-16 07:49:59
【问题描述】:

如何使用 Linqpad 在 C# 语句或 C# 程序中运行 SQL 查询?

是的,出于兼容性原因,我必须将 SQL 语句与 Linq 混合使用。我将 linqpad 与 postgres 驱动程序一起使用,这些驱动程序无法识别 postgres 的 hstore。我已经知道我可以使用经典 SQL 来获取这些被忽略的列。

【问题讨论】:

    标签: c# linqpad


    【解决方案1】:

    您可以使用 LinqPad 上的ExecuteCommand 直接在 C# 语句上运行 SQL 语句。您可以执行带有参数的 SQL 语句,使用 {0}、{1} 等格式化命令字符串。

    ExecuteCommand("DELETE FROM TableOne where PrimaryKey = {0}", primaryKey);

    【讨论】:

    • 请注意,您必须单击 LINQPad 代码上方的“连接”下拉菜单,然后选择您之前在“连接”窗格中设置的连接。完成此操作后,ExecuteCommand 和 ExecuteQuery 可作为全局静态方法使用。
    • 有时自动完成似乎不会提到ExecuteCommand()可用,但是如果您尝试运行脚本,则在您尝试运行它和其他sql命令方法后应该修复自动完成应该是可见的
    【解决方案2】:

    您是否尝试过在 LINQPad 中设置连接?是否有 PostgreSQL 的驱动程序可供下载?建立连接后,您可以运行 SQL 或 C#

    【讨论】:

    • 是的,我试过了。 PostgreSQL 的驱动程序无法返回 hstore 列
    【解决方案3】:

    我找到了部分解决方案:

    this.Command.CommandText = "select * from items LIMIT 50;";
    var result = this.Command.ExecuteReader().Dump();
    

    但是结果变量是一个 IDataReader...而不是一个集合。奇怪的是 Dump() 方法正确显示了一个网格。

    【讨论】:

    • 不确定它是否适用于 Postgres,但您尝试过 this.ExecuteQuery<Items>("select * from items LIMIT 50;").Dump() 吗?
    • 这个解决方案的问题是我的项目定义不等于我的结果。在 linqpad 中,我的 hstore 列被忽略了。我的 item 实体不包含 hstore 列的变量。
    【解决方案4】:

    我有同样的问题,我想只使用 LINQ 查询 PostgreSQL 表中的 HStore 字段。 以前我在 LINQPad 中切换到 SQL 并以这种方式处理问题。但是,如果您在查询 HStore 字段之前使用 .ToList() 或其他方式实现查询,则 LINQPad 可以很好地应对。

    例如,我有一个“调查”表,其中 AssetId 字段是一个简单的文本字段,它“描述”与另一个表的关系,然后是一个 Values HStore 字段,其中包含调查结果,可以包括几个不同的领域。因此,如果我想查找具有“number_lanes”值的“ROAD”的所有调查,那么我的 LINQ 查询是:

    AssetsSurveys.Where (a => a.AssetId.StartsWith("ROAD-")).ToList().Where(a => a.Values.ContainsKey("number_lanes"))

    中间的.ToList() 导致HStore 字段被具体化为Dictionary,然后可以轻松查询。

    【讨论】:

      【解决方案5】:

      您可以使用 ExecuteQueryDynamic 运行原始 SQL,使用 {0}、{1} 传递参数。

      var SQL = @"Select * from Person where Id = {0} ";
      ExecuteQueryDynamic(SQL, 1).Dump();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多