gpt4 book ai didi

c# - Linq .Where(type = typeof(xxx)) 比较总是错误的

转载 作者:太空狗 更新时间:2023-10-29 21:26:16 26 4
gpt4 key购买 nike

我正在尝试分配 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)) 比较总是错误的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46837607/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com