C# 获取从基实体继承的所有实体的类名
假设我有一个基本实体类:C# 获取从基实体继承的所有实体的类名,c#,entity-framework,inheritance,C#,Entity Framework,Inheritance,假设我有一个基本实体类: public abstract partial class Person { public Person() { } public string FirstName { get; set; } public string LastName { get; set; } } 我有多个从该实体继承的实体,例如: public partial class Customer :
public abstract partial class Person
{
public Person()
{
}
public string FirstName { get; set; }
public string LastName { get; set; }
}
我有多个从该实体继承的实体,例如:
public partial class Customer : Person
{
public Customer()
{
}
public int CustomerStatusId { get; set; }
public string AccountNumber { get; set; }
}
还有一些从Person
类继承的实体
是否有一种方法可以获取从Person
类继承的所有实体类名?
我想在选择
框中显示这些,以创建一个通用的添加用户
方法
var names = assembly.GetTypes().Where(t => baseType.IsAssignableFrom(t)).Select(t => t.Name);
尝试上面的方法来获取名称
请参考以下答案
尝试上面的方法来获取名称
使用以下答案作为参考您需要使用反射:
using System.IO;
using System;
using System.Reflection;
using System.Linq;
class Program
{
static void Main()
{
Assembly a = typeof(Program).Assembly;
var types = a.GetTypes().Where(i=>i.IsSubclassOf(typeof(T)));
foreach(var i in types)
{
Console.WriteLine(i);
}
}
}
public class T { }
public class TT : T { }
public class TTT : T { }
您需要使用反射:
using System.IO;
using System;
using System.Reflection;
using System.Linq;
class Program
{
static void Main()
{
Assembly a = typeof(Program).Assembly;
var types = a.GetTypes().Where(i=>i.IsSubclassOf(typeof(T)));
foreach(var i in types)
{
Console.WriteLine(i);
}
}
}
public class T { }
public class TT : T { }
public class TTT : T { }
反思是最简单的方法(如其他答案所示) 但是(由于您用
实体框架
标记了问题,并且您提到了实体
),如果您的目的是获取数据库中存在的派生类型列表(以填充查找),您可以尝试以下方法:
var typeNames = context.Set<Person>()
.ToList()
.Select(x => x.GetType().Name)
.Distinct();
var typeNames=context.Set()
托利斯先生()
.Select(x=>x.GetType().Name)
.Distinct();
反射是最简单的方法(如其他答案所示)
但是(由于您用实体框架
标记了问题,并且您提到了实体
),如果您的目的是获取数据库中存在的派生类型列表(以填充查找),您可以尝试以下方法:
var typeNames = context.Set<Person>()
.ToList()
.Select(x => x.GetType().Name)
.Distinct();
var typeNames=context.Set()
托利斯先生()
.Select(x=>x.GetType().Name)
.Distinct();
看看这篇文章,我想这正是你需要的:我假设你只想知道(当前程序集/有限的程序集)中的实现,因为,当然,这是一个公共类,可能会有无限多的继承类。@Damien_the_Noisever是的,你是对的。看看这篇文章,我想这正是您需要的:我假设您只想知道(当前程序集/有限的程序集)中的实现,因为这是一个公共类,可能有无限多的继承类。@Damien_the_Noisever是的,你是对的。这应该可以,但你似乎有一个放错地方的退货声明。我同意。我已经更新了应该这样做,但你似乎有一个放错地方的返回声明。我同意。我有最新的兴趣。我通常会尽量避免使用反射,但我想知道哪一个会更“昂贵”,我的猜测是另一个db调用会比反射调用更昂贵。如果您在性能方面的意思是“昂贵”,反射可能会快得多,特别是当您的表包含许多人时。但是,如果您要求下拉列表仅包含数据库中已经存在的类型,我想您必须使用该解决方案。我通常会尽量避免使用反射,但我想知道哪一个会更“昂贵”,我的猜测是另一个db调用会比反射调用更昂贵。如果您在性能方面的意思是“昂贵”,反射可能会快得多,特别是当您的表包含许多人时。但是,如果您要求下拉列表仅包含数据库中已经存在的类型,我想您必须使用该解决方案。