Skip to content

shrenky/SPQueryUtil

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 

Repository files navigation

SPQueryUtil - CamlBuilder

SPQUeryUtil now contains CamlBuilder which is designed to build CAML query without any CAML xml, but only code.

To build CAML query by CamlBuilder:

using(SPSite site = new SPSite("http://mysiteurl"))
{
  using(SPWeb web = site.OpenWeb())
  {
    SPList listToQuery = web.Lists["myList"];
    string queryStr = CamlBuilder.BuildQuery(listToQuery, new And(new Eq("Status", "Completed"), new Eq("Id", "2")));
    SPQuery query = new SPQuery();
    query.Query = queryString;
    var items = listToQuery.GetItems(query);
  }
}

1, Support operators and joins (not all currently):

CamlBuilder.BuildQuery(listToQuery, new Eq("status", "Completed"))

generates

<Where>
  <Eq>
    <FieldRef Name="Status"></FieldRef>
    <Value Type="Text">Completed</Value>
  </Eq>
</Where>

2, Combine operators by joins:

CamlBulder.BuildQuery(listToQuery, new And(new Eq("status", "Completed"), new Eq("Id", "2"))

generates:

<Where>
  <And>
    <Eq>
      <FieldRef Name="Status"></FieldRef>
      <Value Type="Text">Completed</Value>
    </Eq>
    <Eq>
      <FieldRef Name="ID"></FieldRef>
      <Value Type="Counter">2</Value>
    </Eq>
  </And>
</Where>

If join contains more than two child elements, join element will be nested automatically:

CamlBulder.BuildQuery(listToQuery, new And(new Eq("status", "Completed"), new Eq("title", "Task1"), new Eq("id", "1"))

generates:

<Where>
  <And>
    <And>
      <Eq>
        <FieldRef Name="Status"></FieldRef>
        <Value Type="Text">Completed</Value>
      </Eq>
      <Eq>
        <FieldRef Name="Title"></FieldRef>
        <Value Type="Text">Task1</Value>
      </Eq>
    </And>
    <Eq>
      <FieldRef Name="ID"></FieldRef>
      <Value Type="Counter">2</Value>
    </Eq>
  </And>
</Where>

3, You need to specify the field title and the value only, for examle: new Eq("status", "Completed"), the field title is "status", which is not case sensitive, and the field name can be either Title or InternalName, CamlBuilder will handle everything to generate a valid CAML for this expression.

About

Easy way to filter items.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages