By: Neil Barkhina
The SharePoint client object model is very versatile at interacting with the SharePoint API from a remote location. Though almost everything can be done with the client object model, some things that are very easy to do in the native API takes a little bit more leg work. One of those examples is the way you interact with lists and libraries. All functions that collect data must be queued up and executed as a batch using the ExecuteQuery function. In this post we will look at the way you would get a Default ListView.
In the native API, iterating through list items from the default view can be done by calling SPList.GetItems(SPList.DefaultView). Unfortunately the client object model doesn’t have a DefaultView property on lists, but they can still be accessed by doing the following.
Authentication
First you need to authenticate against the site by creating a ClientContext Object and passing in the URL of your SharePoint site
ClientContext clientContext1 = new ClientContext("https://mysite.test.com ");
clientContext1.AuthenticationMode = ClientAuthenticationMode.Default;
NetworkCredential credentials = new NetworkCredential("test", "test", "gig-werks");
clientContext1.Credentials = credentials;
If you want to use a specific account, you can pass it in by creating a NetworkCredential object and setting it to the Credentials property of the ClientContext.
Getting Lists and Views
Next you need to queue up some objects such as the site, list, view.
ClientContext clientContext1;
Web rootweb;
List splist;
rootweb = clientContext1.Web;
splist = rootweb.Lists.GetByTitle("Tasks");
clientContext1.Load(rootweb);
clientContext1.Load(rootweb.Lists);
clientContext1.Load(splist);
clientContext1.Load(splist.Views);
clientContext1.ExecuteQuery();
If you don’t load splist.Views we won’t be able to access the views collection of the List. Then call ExecuteQuery to load the objects.
CAML Query
The next part is getting the actual items. This is done by constructing a CAML Query. The trick here is that we are using the ViewQuery property of the ListView which contains the CAML that we need to pass into the ViewXml of our query.
CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXml = "<View><Query>" + splist.Views[0].ViewQuery + "</Query></View>";
ListItemCollection listItems = splist.GetItems(camlQuery);
clientContext1.Load(listItems);
clientContext1.ExecuteQuery();
foreach (ListItem item in listItems)
{
string taskname = safeReadString(item, "Title");
}
Then when you iterate through your items you will see that the sort and filter properties that were on your view come through to your ListItemCollection.

Safely Reading ListItems
In this example I also included the following function to safely read the property and handle null conditions, and then you should be good to go!
private string safeReadString(ListItem itm, string column)
{
try
{
if (itm == null || itm[column] == null || itm[column].ToString() == "")
return "";
return itm[column].ToString();
}
catch (Exception ex)
{
return "";
}
}
By: Neil Barkhina