【问题标题】:LinqPad (LpRun) Command Script To Create CSV file用于创建 CSV 文件的 LinqPad (LpRun) 命令脚本
【发布时间】:2013-11-26 17:08:14
【问题描述】:

我有一个基本的 linq 查询,我想将其放入 CSV 文件中。从 LinqPad 运行时,以下代码可以正常工作:

var phxTix = Companies
.Select (c => new { 
    Ticker = c.Ticker.Trim(),
    FameTick = c.Coverage_Status.Trim()});

Util.WriteCsv(phxTix, @"c:\Temp\phxticks.csv");

但是当我从命令行运行以下 Powershell 脚本时出现错误:

$srcLoc = "c:\linqscripts\GetPhxTix.linq"
$destLoc = "c:\Temp\phxticks.csv"
lprun -lang=e -cxname=myDB -format=csv $srcLoc > $destLoc

我得到的错误是:

lprun : c:\Users\AppData\Local\Temp\LINQPad\_ibakcumi\query_bggevp.cs(35,36) : error CS1513: } 
expected
At c:\PS\GetPhxTicksJob.ps1:4 char:1
+ lprun -lang=e -cxname=myDB $srcLoc > $destLoc
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (c:\Users\...513: } expected:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

c:\linqscripts\GetPhxTix.linq(31,3) : error CS1519: Invalid token ')' in class, struct, or 
interface member declaration
c:\linqscripts\GetPhxTix.linq(33,1) : error CS1022: Type or namespace definition, or end-of-file expected

我做错了什么?或者我缺少什么来执行这个 cli 脚本?

【问题讨论】:

    标签: c# powershell command-line linqpad


    【解决方案1】:

    Chris 是正确的:从省略 -lang 开关开始。您也不需要指定连接,除非您想从 .linq 脚本中存储的内容更改它。

    还有另一个问题:您的查询正在将数据写入 CSV 文件,并且您还告诉 lprun 将输出写入同一文件(该文件将为空,因为它不会转储任何内容)。因此,您最终会用空白文件覆盖 CSV 文件。

    要解决此问题,您需要在一种方法和另一种方法之间做出决定。要么在 LINQ 文件本身中调用 Util.WriteCsv(就像你正在做的那样),然后在不重定向输出的情况下调用 lprun,或者从查询中删除对 Util.WriteCsv 的调用并将查询语言更改为“C# 表达式”。如果你做后者,你的查询应该是这样的:

    Companies
    .Select (c => new { 
        Ticker = c.Ticker.Trim(),
        FameTick = c.Coverage_Status.Trim()})
    

    您对 lprun 的调用应如下所示:

    lprun -format=csv $srcLoc > $destLoc
    

    【讨论】:

      【解决方案2】:

      我认为您的问题是您明确告诉 LinqPad 将该文件作为“表达式”(-lang=e 标志)执行。我怀疑如果你使用-lang=s(声明),它会起作用。

      值得注意的是,由于您正在运行 .linq 文件,因此您可能根本不需要指定 lang 标志(lang 选项通常可以方便地用于运行纯 txt 文件)。

      如果您在文本编辑器中打开 .linq 文件,如果您将脚本保存在 LinqPad 中,您应该会在顶部看到类似这样的内容:<Query Kind="Statements" /> LinqPad 将使用它来确定如何运行脚本(除非你覆盖它)。

      更多信息:http://www.linqpad.net/lprun.aspx

      【讨论】:

        猜你喜欢
        • 2016-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-26
        • 2018-06-22
        • 1970-01-01
        • 2015-05-23
        • 2020-09-06
        相关资源
        最近更新 更多