嗨,我有这个简单的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 数据属性。 运输和 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)。我可以使用任何装饰器吗?
谢谢!
答案 0 :(得分:1)
您可以检查它是否是类似以下的类:
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)
答案 1 :(得分:0)
感谢您的建议:
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 + ", ";
}
}
}
谢谢大家!