Home > CRM 2011 > Reading Optionset using CRM 2011 IOrganizationService

Reading Optionset using CRM 2011 IOrganizationService


Below is the code to read “Optionset” using CRM 2011 IOrganizationService.

Below logic reads the Optionset and returns “KeyValue” list (Key = Option Label; Value = Option Value)

using Microsoft.Xrm.Sdk;

using Microsoft.Xrm.Sdk.Client;

using Microsoft.Xrm.Sdk.Query;

using Microsoft.Xrm.Sdk.Messages;

using Microsoft.Xrm.Sdk.Metadata;

  public List<KeyValuePair<string, int>> GetOptionSet(string entityName, string attributeName, IOrganizationService service)


var optionSet = new List<KeyValuePair<string, int>>();

            RetrieveAttributeRequest request = new RetrieveAttributeRequest();

request.EntityLogicalName = entityName;

request.MetadataId = Guid.Empty;

request.LogicalName = attributeName;

request.RetrieveAsIfPublished = true;

 OrganizationResponse response = service.Execute(request); 

if (response != null && response.Results != null)


foreach (KeyValuePair param in response.Results)


foreach (OptionMetadata option in ((EnumAttributeMetadata)param.Value).OptionSet.Options)


string name = option.Label.LocalizedLabels[0].Label.ToString().Trim();

int value = option.Value.Value;

optionSet.Add(new KeyValuePair(name, value));




return optionSet;


        // Returns option label by value

public string GetOptionLabelByValue(List<KeyValuePair<string, int>> optionSet, int optValue)


foreach (KeyValuePair< string, int> optn in optionSet)


if (optn.Value == optValue)


return optn.Key;



return string.Empty;


        // Returns option Value by Label

public int GetOptionValueByLabel(List<KeyValuePair<string, int>> optionSet, string optLabel) {        {

foreach (KeyValuePairoptn in optionSet)


if (optn.Key) == optLabel)


return optn.Value;



return 0;


How Do I call these methods:-

  • To read ‘Gender (i.e., gendercode)’ optionset of entity ‘Contact (i.e., contact)’
  • Get Optionset dictionary by calling “GetOptionSet()” method
  • Call “GetOptionLabelName()” to get Label by Value
  • Call “GetOptionValueByLabel()” to get Value by Label

// Get OptionSet First

var  optGender  = GetOptionSet(“contact”, “gendercode”, orgService);

// Get Option label by value

string optLblGander = GetOptionLabelName(optGender  , 1); /* 1 is Value of Male */

// To get Option Value by Label

int optValueGander = GetOptionValueByLabel(optGender  , “Male”);

Hope it helps 🙂

  1. John Johnson
    March 19, 2013 at 11:24 AM

    Thanks for this. However I can’t get this to compile – on this line: foreach (KeyValuePair param in response.Results){

    I get “Using the generic type ‘System.Collections.Generic.KeyValuePair requires 2 type arguments.

  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: