Reblogging this useful code sample for updating multi-value lookup columns using CSOM in C# in SharePoint 2010, but also valid for SharePoint 2013.
Originally posted on Bin's Dev Notes:
I received a task that needs to update multi-value lookup column value in SharerePoint 2010 using C#. While it is easy to set columns of simple data types, with lookup column it is a bit more complicated. Searching Web gives me following link which is helpful. However, that only works with single value column. After a bit trial and error, I worked out following code that is functioning.
1
public void UpdateLookup(string siteUrl, int id, string lookupColumnName,
List multiLookupValues, string listName, string lookupListName)
{
using (ClientContext ctx = new ClientContext(siteUrl))
{
ctx.Credentials = new NetworkCredential(_username, _password, _domain);
var list = ctx.Web.Lists.GetByTitle(listName);
var item = list.GetItemById(id);
var lookUpList = ctx.Web.Lists.GetByTitle(lookupListName);
CamlQuery query = new CamlQuery();
query.ViewXml = CreateCaml(multiLookupValues);
var items = lookUpList.GetItems(query);
ctx.Load(item, i => i[lookupColumnName]);
ctx.Load(items);
ctx.ExecuteQuery();
var lookupValues = new ArrayList();
FieldLookupValue[] values = item[lookupColumnName] as FieldLookupValue[];
foreach (ListItem listItem in items)
{
var lookupValue = new FieldLookupValue { LookupId = listItem.Id };
lookupValues.Add(lookupValue);
}
item.ParseAndSetFieldValue(lookupColumnName…
View original 49 more words