我正在尝试在static List<PropertyInfo>类中分配所有DbSet属性的Entities

但是,当代码运行时,列表为空,因为.Where(x => x.PropertyType == typeof(DbSet)) 始终返回false

我尝试了.Where(...)方法的多种变体,例如typeof(DbSet<>)Equals(...).UnderlyingSystemType等,但没有任何效果。

为什么在我的情况下.Where(...)总是返回false?

我的代码:

public partial class Entities : DbContext
{
    //constructor is omitted

    public static List<PropertyInfo> info = typeof(Entities).getProperties().Where(x => x.PropertyType == typeof(DbSet)).ToList();

    public virtual DbSet<NotRelevant> NotRelevant { get; set; }
    //further DbSet<XXXX> properties are omitted....
}

最佳答案

由于DbSet是单独的类型,因此您应该使用更具体的方法:

bool IsDbSet(Type t) {
    if (!t.IsGenericType) {
        return false;
    }
    return typeof(DbSet<>) == t.GetGenericTypeDefinition();
}

现在,您的Where子句将如下所示:
.Where(x => IsDbSet(x.PropertyType))

关于c# - Linq。where(type = typeof(xxx))比较始终为false,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46837607/

10-13 07:55