Question

Can anyone help me with this CAML query? When I flip the Ascending attribute from TRUE to FALSE (have also tried True and False), it doesn't re-order the result set.

The rest of the CAML is correct, it is being generated by a tool and the appropriate results are being returned.

<Where>
  <And>
    <And>
      <Eq>
        <FieldRef Name="Branch"/>
        <Value Type="Text">Camp 1</Value>
      </Eq>      
      <Eq>
        <FieldRef Name="Type"/>
        <Value Type="Choice">Day</Value>
      </Eq>
    </And>
    <Geq>
      <FieldRef Name="StartDateTime"/>
      <Value Type="DateTime">2009-01-05T00:00:00Z</Value>
    </Geq>
  </And>
  <OrderBy>
    <FieldRef Ascending="TRUE" Name="Title" />
  </OrderBy>
</Where>
Was it helpful?

Solution

Doesn't the OrderBy have to be outside the Where clause?

    <Where>
  <And>
    <And>
      <Eq>
        <FieldRef Name="Branch"/>
        <Value Type="Text">Camp 1</Value>
      </Eq>      
      <Eq>
        <FieldRef Name="Type"/>
        <Value Type="Choice">Day</Value>
      </Eq>
    </And>
    <Geq>
      <FieldRef Name="StartDateTime"/>
      <Value Type="DateTime">2009-01-05T00:00:00Z</Value>
    </Geq>
  </And>
  </Where>
<OrderBy>
    <FieldRef Ascending="TRUE" Name="Title" />
  </OrderBy>

See http://msdn.microsoft.com/en-us/library/ms442728.aspx

OTHER TIPS

I agree with the answer above, the <Query> must be outside the <Where>. Please also note that when comparing with DateTime fields, it's generally a good idea to include the IncludeTimeValue attribute:

<Geq>
      <FieldRef Name="StartDateTime"/>
      <Value Type="DateTime" IncludeTimeValue="FALSE">2009-01-05T00:00:00Z</Value>
</Geq>

and set it to false or true, depending on whether you want to include time values or not in your query.

I spent almost an entire week trying to get date orders to work using Client OM CamlQuery object. Finally I realised that I had to set

camlQuery.DatesInUtc = true;

It seems to me that if you are using native object model and the SPQuery object that SharePoint interprets that date as UTC by default (in our environment) as soon as you move to CamlQuery object with the ClientOM you need to set this parameter.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top