2009-02-05 7 views
7

Desidero selezionare un elemento dell'elenco di condivisioni che ha il valore Massimo per una colonna particolare. Come posso farlo usando le query CAML?Query MAX con CAML

risposta

9
<Query> 
    <OrderBy> 
      <FieldRef Name="particularcolumn" Ascending="FALSE" /> 
    </OrderBy> 
</Query> 
+6

Non dimenticare di impostare RowLimit sulla query. – etc

3

Questo può essere fatto ordinando da questo campo in modo discendente e recuperando il primo elemento della raccolta.

12

La seguente query CAML sarebbe tornato il valore massimo per una data colonna:

var maxValue; 

try 
{ 
    using (SPSite objSite = new SPSite(sSiteUrl)) 
    { 
     using (SPWeb objWeb = objSite.OpenWeb()) 
     { 
      SPList objList = objWeb.Lists[sListName]; 

      SPQuery objQuery = new SPQuery(); 
      objQuery.Query = "<OrderBy><FieldRef Name='ColumnName' Ascending='False' /></OrderBy><RowLimit>1</RowLimit>"; 
      objQuery.Folder = objList.RootFolder; 

      // Execute the query against the list 
      SPListItemCollection colItems = objList.GetItems(objQuery); 

      if (colItems.Count > 0) 
      { 
       maxValue = (<Insert Appropriate Cast>) colItems[0]; 
      } 
     } 
    } 
} 
catch (Exception ex) 
{ 
    ... 
} 

return maxValue; 
+0

Quali sono i vantaggi delle impostazioni 'objQuery.Folder = objList.RootFolder;'? –

0

Utilizzando il modello oggetto client, questo è come sto recuperando l'ID massimo da un elenco.

using (ClientContext clientContext = new ClientContext("https://sharepointed.com")) 
    { 
     clientContext.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials; 

     oWeb = clientContext.Web; 

     List myList= oWeb.Lists.GetByTitle("MyList"); 

     CamlQuery camlQuery = new CamlQuery(); 
     camlQuery.ViewXml = ("<View><Query> <OrderBy> <FieldRef Name='ID' Ascending='False' /> </OrderBy> </Query> <RowLimit>1</RowLimit> </View>"); 
     Microsoft.SharePoint.Client.ListItemCollection listItems = myList.GetItems(camlQuery); 
     clientContext.Load(listItems); 
     clientContext.ExecuteQuery(); 
    }