2009-02-05 21 views
7

Quiero seleccionar un elemento de la lista compartida que tiene el valor Máximo para una columna en particular. ¿Cómo puedo hacer esto usando consultas CAML?Consulta MAX usando CAML

Respuesta

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

No olvide establecer RowLimit en la consulta. – etc

3

Esto se puede hacer ordenando por este campo de forma descendente y tomando el primer elemento de la colección devuelto.

12

La siguiente consulta CAML devolvería el valor máximo de una columna dada:

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

¿Cuáles son los beneficios de la configuración 'objQuery.Folder = objList.RootFolder;'? –

0

Usando el modelo de objetos de cliente, esta es la forma en que estoy recuperando el ID máximo de una lista.

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(); 
    } 
Cuestiones relacionadas