Hello everybody,
recently for me it was needed to find out all key fields of DAC class. Code below does this:

public List<string> GetKeyFieldsOfDAC(Type dacClass)
{
var result = new List<string>();
var properties = dacClass.GetProperties().ToList();
foreach (PropertyInfo info in properties)
{
var attrs = info.GetCustomAttributes(true);
foreach (object attr in attrs)
{
if (attr.HasProperty("IsKey"))
{
dynamic typedAttribute = attr;
if (typedAttribute.IsKey)
{
result.Add(info.Name);
}
}
}
}
return result;
}
And HasProperty method implementation goes below:
public static bool HasProperty(this object objectToCheck, string property)
{
try
{
var type = objectToCheck.GetType();
var prop = type.GetProperty(property);
if (prop != null)
{
return true;
}
}
catch (AmbiguousMatchException) // it means we have more then one property
{
return true;
}
return false;
}
That is not the most elegant solution in my life, and if you want to suggest a better one, please feel free to suggest.