gpt4 book ai didi

c# - 我如何才能找到其泛型类型派生自给定基类型的所有 DbSet?

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

如何获取所有 DbSet 的 List,其中包含的类型派生自 IncomingServiceOrderBase

我可以使用反射来获取所有 DbSet,但我如何将其筛选为仅包含派生类型的那些?

上下文

public class MyContext : DbContext
{
public DbSet<BuildingOrder> BuildingOrders { get; set; }
public DbSet<DeliveryOrder> DeliveryOrders { get; set; }
public DbSet<RetailAssemblyOrder> RetailAssemblyOrders { get; set; }
}

型号

public class BuildingOrder : IncomingManufacturedProductOrderBase { }
public class DeliveryOrder : IncomingServiceOrderBase { }
public class RetailAssemblyOrder : IncomingServiceOrderBase { }

最佳答案

你可以这样做:

var sets =
from p in typeof(MyContext).GetProperties()
where p.PropertyType.IsGenericType
&& p.PropertyType.GetGenericTypeDefinition() == typeof(DbSet<>)
let entityType = p.PropertyType.GetGenericArguments().First()
where typeof(IncomingServiceOrderBase).IsAssignableFrom(entityType)
select p.Name;

(这将返回属性的名称;如果您想要实际的 DbSet 实例,请将 p.Name 替换为 p.GetValue(context, null))

关于c# - 我如何才能找到其泛型类型派生自给定基类型的所有 DbSet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10490885/

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