我正在尝试在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/