Я думаю, что вы можете достичь этого с помощью атрибутов, как вы говорите.
Вы можете создать собственный атрибут, например:
internal class MongoDBFieldAttribute : Attribute
{
public string Field{ get; private set; }
public MongoDBFieldAttribute(string field)
{
this.Field= field;
}
}
Тогда в вашем классе:
public class CustomerModel
{
...
[MongoDBField("ReceiverModeID")]
public string ReceiverID { get; set; }
}
Я думаю, что может быть лучше без пробелов, это может быть проблемой, может быть, вы можете использовать Trim () или аналогичный ... или йой может попробовать [MongoDBField ("Идентификатор режима приемника")], никогда не пытался.
Затем вы можете создать метод, который может связывать как имя свойства, так и имя атрибута, например:
private Dictionary<string, string> getRelationPropertyAttribute(Type type)
{
var dicRelation = new Dictionary<string, string>();
var properties = type.GetProperties();
foreach (var property in properties)
{
var attributes = property.GetCustomAttributes(inherit: false);
var customAttributes = attributes
.AsEnumerable()
.Where(a => a.GetType() == typeof(MongoDBFieldAttribute));
if (customAttributes.Count() <= 0)
continue;
foreach (var attribute in customAttributes)
{
if (attribute is MongoDBFieldAttribute attr)
dicRelation[attr.Field] = property.Name;
}
}
return dicRelation;
}
Наконец, вы можете поиграть с этим словарем, и в вашем методе вы можете сделатьчто-то вроде этого:
public static bool CheckPropertyCompare(CustomerModel customer, Exclude item)
{
var dicRelation = getRelationPropertyAttribute(typeof(CustomerModel));
var propertyName = dicRelation[item.SourceCol];
var propertyValue = GetPropValue(customer, propertyName);
return item.Values.Value.ToList().Contains(propertyValue);
}
Это идея ... Надеюсь, это поможет.