Hi All,
Many a times you might come into a situation when you have to deal with some complex query building and the scenario is like you have to pull the data from a SharePoint list and the records on which you need to fire the <Where> clause is not fixed.
Many a times you might come into a situation when you have to deal with some complex query building and the scenario is like you have to pull the data from a SharePoint list and the records on which you need to fire the <Where> clause is not fixed.
So, you to need to write a dynamic query where the <OR> tags changes accordingly.
Here is the code:
// This lstPeers can be of any type like array or List Type or Collection. List<String> lstPeers = new List<String>(); SPQuery peersQuery = new SPQuery(); string createquery = "";
peersQuery.Query = "<Where>" + CreateDynamicQuery(createquery, lstPeers) + "</Where>";
Here is your Dynamic Query :
protected String CreateDynamicQuery(String query, List<string> lstString) { bool firstIteration = true; if (query != "") { query = "<Or>" + query; firstIteration = false; } if (lstString.Count >= 2) { query += "<Or>"; query += "<Eq><FieldRef Name='Type' /><Value Type='Lookup'>" + lstString[0] + "</Value></Eq>"; query += "<Eq><FieldRef Name='Type' /><Value Type='Lookup'>" + lstString[1] + "</Value></Eq>"; query += "</Or>"; lstString.RemoveRange(1, 1); lstString.RemoveRange(0, 1); if (!firstIteration) query += "</Or>"; if (lstString.Count != 0) query = CreateDynamicQuery(query, lstString); } else { if (lstString.Count != 0) { query += "<Eq><FieldRef Name='Type' /><Value Type='Lookup'>" + lstString[0] + "</Value></Eq>"; if (!firstIteration) query += "</Or>"; } } return query; }
As you can notice you are calling a recursive function and dynamically creating the <OR> tags.
I am sure this will help your case !!
This helped a lot thank you
ReplyDelete