inq*_*one 3 c# powershell command-line linqpad
我有一个基本的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");
Run Code Online (Sandbox Code Playgroud)
但是当我从命令行运行以下Powershell脚本时出现错误:
$srcLoc = "c:\linqscripts\GetPhxTix.linq"
$destLoc = "c:\Temp\phxticks.csv"
lprun -lang=e -cxname=myDB -format=csv $srcLoc > $destLoc
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
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
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?或者我在执行这个cli脚本时缺少什么?
克里斯是正确的:首先省略-lang开关.除非要从存储在.linq脚本中的内容更改连接,否则也无需指定连接.
还有一个问题:您的查询是将数据写入CSV文件,并且您还告诉lprun将输出写入同一文件(由于它不会转储任何内容,因此将为null).所以你最终会用空白的文件覆盖CSV文件.
要解决这个问题,您需要在一种方法和另一种方法之间做出决定.在LINQ文件本身中调用Util.WriteCsv(正如您所做),并在不重定向输出的情况下调用lprun,或从查询中删除对Util.WriteCsv的调用,并将查询语言更改为"C#Expression".如果您执行后者,您的查询应如下所示:
Companies
.Select (c => new {
Ticker = c.Ticker.Trim(),
FameTick = c.Coverage_Status.Trim()})
Run Code Online (Sandbox Code Playgroud)
你对lprun的调用应该是这样的:
lprun -format=csv $srcLoc > $destLoc
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1382 次 |
| 最近记录: |