private static List <LookupListItem <Guid?> > GetLookupValues(bool withEmptyRow, EntityAttribute attribute)
        {
            var    lookupValue       = attribute.AttributeLookupValues.First();
            var    lookupValueEntity = lookupValue.Entity;
            string displayMemberName =
                lookupValueEntity.Attributes.First(a => a.AttributeId == lookupValue.DisplayEntityAttributeId).PhysicalName;
            string valueMemberName = lookupValueEntity.Name + "Id";
            var    values          = new ODataObjectSpace().GetObjects(lookupValueEntity.PhysicalName);

            var items = new List <LookupListItem <Guid?> >();

            foreach (var value in values)
            {
                var    item        = new LookupListItem <Guid?>();
                object displayName = value.GetType().GetProperty(displayMemberName).GetValue(value, null);
                if (displayName != null)
                {
                    item.DisplayName = displayName.ToString();
                    item.Value       = (Guid)value.GetType().GetProperty(valueMemberName).GetValue(value, null);
                    items.Add(item);
                }
            }
            if (withEmptyRow)
            {
                items.Insert(0, new LookupListItem <Guid?>());
            }
            return(items);
        }
        private static List <LookupListItem <int?> > GetPickListValues(EntityAttribute attribute, int langId)
        {
            var values = attribute.OptionSet.AttributePicklistValues.OrderBy(v => v.DisplayOrder);
            var items  = new List <LookupListItem <int?> >();

            foreach (var value in values)
            {
                var item            = new LookupListItem <int?>();
                var localizedLabels = MetadataRepository.LocalizedLabels.Where(l => l.ObjectId == value.AttributePicklistValueId);
                var localizedLabel  = localizedLabels.FirstOrDefault(l => l.LanguageId == langId) ?? localizedLabels.First();
                if (localizedLabel != null)
                {
                    item.DisplayName = localizedLabel.Label;
                }
                item.Value = value.Value;
                items.Add(item);
            }
            if (attribute.IsNullable.HasValue && attribute.IsNullable.Value)
            {
                items.Insert(0, new LookupListItem <int?>());
            }
            return(items);
        }