获取类型为ICollection的属性
本文关键字:属性 BaseEntity 取类型 ICollection 获取 | 更新日期: 2023-09-27 18:18:54
我正在努力获得一个类的所有属性,这是一个ICollection<BaseEntity>
。
实体例子:
public class BaseEntity
{
public int Id { get; set; }
}
public class Post : BaseEntity
{
public string Name { get; set; }
}
public class User : BaseEntity
{
public string Name { get; set; }
public ICollection<Post> Posts { get; set; }
public Post MyPost { get; set; }
}
我可以得到属性,这是一个类派生自BaseEntity通过使用:
var baseEntProps = properties.Where(p => typeof(BaseEntity).IsAssignableFrom(p.PropertyType));
我如何为iccollection做同样的事情?我试过了
var p2 = properties.Where(p => typeof (ICollection<BaseEntity>).IsAssignableFrom(p.PropertyType));
但是没有给出任何结果。我可以使用ICollection<Post>
而不是ICollection<BaseEntity>
,但这偏离了我想要做的目的。
var p2 = properties.Where(p => typeof (ICollection<Post>).IsAssignableFrom(p.PropertyType));
这很难看,但是可以这样做:
var baseEntProps = properties
.Where(p => p.PropertyType.IsGenericType &&
p.PropertyType.GetGenericTypeDefinition() == typeof(ICollection<>) &&
typeof(BaseEntity).IsAssignableFrom(p.PropertyType.GetGenericArguments()[0]));