internal IMemberAccessor GetDisplayMember(Type entityType) { return(_displayCache.GetOrAdd(entityType, key => { TypeAccessor typeAccessor = TypeAccessor.GetAccessor(entityType); IMemberAccessor displayMember = null; var displayAttribute = GetAttribute <DisplayColumnAttribute>(entityType); // first try DisplayColumnAttribute property if (displayAttribute != null) { displayMember = typeAccessor.FindProperty(displayAttribute.DisplayColumn); } if (displayMember != null) { return displayMember; } var properties = typeAccessor.GetProperties().ToList(); // try first string property displayMember = properties.FirstOrDefault(m => m.MemberType == typeof(string)); if (displayMember != null) { return displayMember; } // try second property return properties.Count > 1 ? properties[1] : null; })); }