获取类型为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));

获取类型为ICollection<BaseEntity>的属性

这很难看,但是可以这样做:

var baseEntProps = properties
.Where(p => p.PropertyType.IsGenericType &&
            p.PropertyType.GetGenericTypeDefinition() == typeof(ICollection<>) &&
            typeof(BaseEntity).IsAssignableFrom(p.PropertyType.GetGenericArguments()[0]));