В LINQ.Где(type = typeof (xxx)) сравнение всегда ложно

Я пытаюсь назначить static List<PropertyInfo> всех DbSet свойства Entities класса.

однако при запуске кода список пуст, потому что .Where(x => x.PropertyType == typeof(DbSet)) всегда возвращает false.

я пробовал несколько вариантов в .Where(...) методом typeof(DbSet<>), Equals(...), .UnderlyingSystemType, etc. но ничего не помогает.

почему .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....
}

1 ответов


С DbSet является отдельным типом, вы должны использовать более конкретный подход:

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

теперь ваш Where пункт будет выглядеть так:

.Where(x => IsDbSet(x.PropertyType))