7 out of 17 rated this helpful - Rate this topic

SPQuery Class

Windows SharePoint Services 3
Represents a query in a list view.

Namespace: Microsoft.SharePoint
Assembly: Microsoft.SharePoint (in microsoft.sharepoint.dll)
[SharePointPermissionAttribute(SecurityAction.InheritanceDemand, ObjectModel=true)] 
[SharePointPermissionAttribute(SecurityAction.LinkDemand, ObjectModel=true)] 
public class SPQuery

The following code example displays the titles of items in a Tasks list where the Status column equals Completed. The example uses Collaborative Application Markup Language (CAML) to define the query.

This example requires using directives (Imports in Microsoft Visual Basic) for the ( Default Namespace )Microsoft.SharePoint and ( Default Namespace )Microsoft.SharePoint.Utilities namespaces.

using (SPWeb oWebsiteRoot = SPContext.Current.Site.RootWeb)
{

    SPList oList = oWebsiteRoot.Lists["Tasks"];

    SPQuery oQuery = new SPQuery();
    oQuery.Query = "<Where><Eq><FieldRef Name='Status'/>" +
        "<Value Type='Text'>Completed</Value></Eq></Where>";
    SPListItemCollection collListItems = oList.GetItems(oQuery);

    foreach (SPListItem oListItem in collListItems)
    {
        Response.Write(SPEncode.HtmlEncode(oListItem["Title"].ToString()) + 
            "<BR>");
    }
}
NoteNote:

Certain objects implement the IDisposable interface, and you must avoid retaining these objects in memory after they are no longer needed. For information about good coding practices, see Best Practices: Using Disposable Windows SharePoint Services Objects.

System.Object
  Microsoft.SharePoint.SPQuery
Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
Did you find this helpful?
(1500 characters remaining)
Community Content Add
Annotations FAQ
Using CAML Query Builder
U2U CAML query builder uses the <query></query> to enclose the query.  When using it to build query, make sure to not use the <query></query> tags. They will render the query useless and return all list items.
You can reuse instances...
But you must null out the ViewXml property before each use.
Do not reuse SPQuery instances!

Be sure to create a new SPQuery instance each time you use it. You cannot create one SPQuery instance and then reuse it multiple times in a loop where you alter the SPQuery's Query value.

CAML query does not include time for searching lists

Caml query not using the time part in datetime. If your are doing a caml query and you see that your time is being ignored in datetime try this:

<Value Type=”DateTime” IncludeTimeValue=”TRUE”><Today /></Value>

You have to use IncludeTimeValue=”TRUE”.

Check http://puneetspeed.spaces.live.com/blog/cns!AFAFB88D250BEE36!308.entry for more

SPQuery can get the items from the sub folder
To Get the Search Items from the sub folders of the list using SPQuery you can do following
SPQuery.ViewAttributes = "Scope=\"Recursive\"";
However this is undocumented/non public information so MS can change it any time in the further releases and you code will start breaking.
Instead, one can use SPSiteDateQuery class to search across multiple Lists. you can go to my blog for further detail and example.
http://www.sharepointblogs.com/akhileshtiwari/archive/2007/10/11/query-multiple-lists-using-spsitedataquery-class.aspx