【问题标题】:How to get parent tables and children tables by retrieve table object properties?如何通过检索表对象属性获取父表和子表?
【发布时间】:2014-08-09 03:15:08
【问题描述】:

我有下面的代码,它用于提取对象“申请人”(表申请人)属性。

void Main()
{
        PropertyInfo[] props = typeof(Applicant).GetProperties();
        foreach (PropertyInfo prop in props)
        {
            prop.Name.Dump();
        }
}

结果是:

EthnicBackground
Distance
TransplantHospital
Appointments
Employers
Claims

EthnicBackground、Distance、TransplantHospital 是申请人的父表。

Appointments、Employers、Claims 是申请人的子表。

现在结果是父表和子表混合在一起。

如何修改代码,通过父表和子表自动分隔输出结果?

基于数据库表申请人的申请人类构造如下:

【问题讨论】:

    标签: asp.net linq linq-to-sql linq-to-entities linqpad


    【解决方案1】:

    我认为 PropertyType 应该是typeOf(T)typeOf(EntitySet<T>),具体取决于关系类型。因此,您可能可以通过查看类型是否有任何通用参数来区分两者,例如:

    PropertyInfo[] props = typeof(Applicant).GetProperties();
    
    var parents = (from r in props 
                   where r.PropertyType.GenericTypeArguments.Count() == 0 
                   select r.Name)
                   .ToList().Dump();
    
    var children = (from r in props 
                    where r.PropertyType.GenericTypeArguments.Count() == 1 
                    select r.Name)
                   .ToList().Dump();
    

    【讨论】:

    • 非常感谢 SGMOORE!优秀!这是一个了不起的解决方案。 :-)
    • 嗨 Sgmoore,想想如果返回父/子表名加上表主键会很有帮助。您能否修改代码以获取它?谢谢。
    【解决方案2】:

    在循环中,您可以检查 PropertyInfo.DeclaringType 属性。所以代码会变成(大致)

    void Main()
    {
        PropertyInfo[] props = typeof(Applicant).GetProperties();
        foreach (PropertyInfo prop in props)
        {
            if (prop.DeclaringType == typeof(Applicant)) 
            {
               // this is an Applicant property
               string name = prop.Name;
               // TODO: store wherever you need
            }
            else
            {
               // this is a parent table property
                 string name = prop.Name;
               // TODO: store wherever you need
            }
        }
    }
    

    【讨论】:

    • 谢谢詹姆斯。我刚试过你的解决方案。它不工作。父母和儿子的表名仍然混在一起。
    • @Matthew 课程的结构如何?是否根据DeclaringType进入正确的执行路径?我不确定方法调用在您的代码中做了什么,但您可能需要添加一些东西来区分属于申请人与父类的属性。你能发布类定义吗?
    • @Matthew 对不起,我的意思是 c# 类定义。申请人类型继承自其他类型对吗?
    猜你喜欢
    • 2014-08-10
    • 1970-01-01
    • 2014-02-04
    • 1970-01-01
    • 2019-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多