首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CAML查询过滤where子句

CAML查询过滤where子句
EN

Stack Overflow用户
提问于 2016-05-02 17:33:33
回答 3查看 2.4K关注 0票数 0

我在powershell里面有下面的caml。如果我在CAML查询中硬编码$month,那么它就能工作。我使用的语法正确吗?

代码语言:javascript
复制
write-host $month
$CAML = '<Where>
         <Eq>
            <FieldRef Name="Period" />
            <Value Type="Text">$month</Value>
         </Eq>
        </Where>'
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-05-02 17:47:41

在PowerShell中,字符串要么是可扩展的(就像perl中的内插字符串),要么是文字。

双引号(")中包含的任何内容都是可扩展的,而单引号(')则用于字符串文本,就像在您的例子中一样。

代码语言:javascript
复制
$month = 'Jan'
"First month is $month" # This will result in: First month is Jan
'First month is $month' # This will result in: First month is $month

对于多行字符串,请使用here-string (在其他语言中通常称为here-docs )。同样的规则适用于:

代码语言:javascript
复制
$CAML = @"
<Where>
  <Eq>
    <FieldRef Name="Period" />
    <Value Type="Text">$month</Value>
  </Eq>
</Where>
"@ 

如果您想使用字符串文字(即。如果字符串包含要保留的其他特殊字符或文字$,但需要插入特定的变量值,则使用-f格式运算符as shown by @jisaak

代码语言:javascript
复制
$CAML = @'
<Where>
  <Eq>
    <FieldRef Name="Period" />
    <Value Type="Text">{0}</Value>
  </Eq>
</Where>
'@ -f $month

要了解有关字符串展开和引用的更多信息,请参见Get-Help about_Quoting_Rules

票数 2
EN

Stack Overflow用户

发布于 2016-05-02 17:41:08

您的变量不会被替换,因为您使用的是单引号。可以使用双引号,也可以使用格式字符串(别名-f):

代码语言:javascript
复制
write-host $month
$CAML = '<Where>
         <Eq>
            <FieldRef Name="Period" />
            <Value Type="Text">{0}</Value>
         </Eq>
        </Where>' -f $month
票数 1
EN

Stack Overflow用户

发布于 2016-05-02 17:49:41

谢谢,希萨克。只是想分享下面的代码,因为这一个也是工作的。

代码语言:javascript
复制
$CAML = "<Where>
             <Eq>
                <FieldRef Name='Period' />
                <Value Type='Text'>$($month)</Value>
             </Eq>
            </Where>"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36988233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档