CAML查询过滤where子句

时间:2016-05-02 17:33:34

标签: powershell caml

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

{{1}}

3 个答案:

答案 0 :(得分:2)

在PowerShell中,字符串是可扩展(如perl中的可插入字符串)或 literal

用双引号括起来的任何内容(")都是可扩展的,而单引号(')用于字符串文字,就像你的情况一样。

$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)。同样的规则适用:

$CAML = @"
<Where>
  <Eq>
    <FieldRef Name="Period" />
    <Value Type="Text">$month</Value>
  </Eq>
</Where>
"@ 

如果要使用字符串文字(即,如果字符串包含您要保留的其他特殊字符或文字$)但是您需要插入特定的变量值,请使用{{1格式化运算符as shown by @jisaak

-f

要详细了解字符串扩展和引用,请参阅Get-Help about_Quoting_Rules

答案 1 :(得分:1)

您的变量因为使用单引号而无法替换。您可以使用双引号或格式字符串(别名-f):

write-host $month
$CAML = '<Where>
         <Eq>
            <FieldRef Name="Period" />
            <Value Type="Text">{0}</Value>
         </Eq>
        </Where>' -f $month

答案 2 :(得分:0)

谢谢Jissak。只是想分享以下代码,因为这个也适用。

@Override
protected void onDestroy() {
    MainGUI.Donors.clear();
    super.onDestroy();
}