[英]Mark properties of class for reflection in C#
嗨,我有這個簡單的DTO課程
public class Clientes_mdl
{
public int ID_Cliente { get; set; }
public string RazonSocial { get; set; }
public Enumerador_mdl CondicionIva { get; set; }
public Nullable<Enumerador_mdl> Transporte { get; set; }
public IEnumerable<Direcciones_view> Direcciones { get; set; }
}
ID_Cliente和RazonSocial具有數據屬性。 Transporte和Direcciones是其他類的導航屬性。
我使用此反射代碼來獲取類屬性名稱:
protected void base_UpdateCommand(IDbCommand myCommand, TEntity entity, string sWhere)
{
var properties = (typeof(TEntity)).GetProperties().ToList();
foreach (var prop in properties)
{
if (prop.Name.ToUpper() != sKeyField.ToUpper()
{
sProps = sProps + prop.Name + "=@" + prop.Name + ", ";
}
}
}
現在,我需要一種方法來忽略導航屬性,而僅獲取類的數據屬性名稱(ID_Cliente和RazonSocial)。 有什么裝飾我可以用來做嗎?
謝謝!
您可以檢查它是否是類似以下的類:
var properties = typeof(Clientes_mdl).GetProperties();
var propertyNames = properties
.Where(x => x.PropertyType == typeof(string) ||
!x.PropertyType.IsClass ||
!typeof(IEnumerable).IsAssignableFrom(x.PropertyType)
)
.Select(x=>$"{x.Name} =@ {x.Name}")
.ToArray();
var propertyNameString = string.Join(",", propertyNames);
如果您想將列表留在那里,則可以刪除!typeof(IEnumerable).IsAssignableFrom(x.PropertyType)
感謝您的建議:
public class Clientes_mdl
{
public int ID_Cliente { get; set; }
public string RazonSocial { get; set; }
[KeyAttribute]
public Enumerador_mdl CondicionIva { get; set; }
[KeyAttribute]
public Nullable<Enumerador_mdl> Transporte { get; set; }
[KeyAttribute]
public IEnumerable<Direcciones_view> Direcciones { get; set; }
}
和反射代碼:
protected void base_UpdateCommand(IDbCommand myCommand, TEntity entity, string sWhere)
{
var properties = (typeof(TEntity)).GetProperties().ToList();
foreach (var prop in properties)
{
bool bIgnore = prop.GetCustomAttributes(true).Any(a => a is KeyAttribute);
if (prop.Name.ToUpper() != sKeyField.ToUpper() && !bIgnore)
{
sProps = sProps + prop.Name + "=@" + prop.Name + ", ";
}
}
}
感謝大家!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.