C# 如何读取嵌套类的数据?

C# 如何读取嵌套类的数据?,c#,.net,sql,class,class-design,C#,.net,Sql,Class,Class Design,如果我的问题不清楚,我很抱歉 我有一个类包含一些属性,其中一个是“Parent”,它与这个类的类型相同 当我从数据库中读取数据时,我为每个属性设置了合适的值但当我从数据库中读取“ParentID”属性时,如何放置它呢 如果不清楚,我就举个例子 非常感谢您的光临 这是我的课: 当我从数据库中读取数据时,我将“ID”填充为int,“Name”填充为string 但是,当我从数据库中将“Parent”设置为“smsPart”时,如何将其设置为“ParentID”int.?如果要使用延迟求值,一种方法是

如果我的问题不清楚,我很抱歉

我有一个类包含一些属性,其中一个是“Parent”,它与这个类的类型相同

当我从数据库中读取数据时,我为每个属性设置了合适的值但当我从数据库中读取“ParentID”属性时,如何放置它呢

如果不清楚,我就举个例子

非常感谢您的光临

这是我的课:

当我从数据库中读取数据时,我将“ID”填充为int,“Name”填充为string


但是,当我从数据库中将“Parent”设置为“smsPart”时,如何将其设置为“ParentID”int.?

如果要使用延迟求值,一种方法是为ParentID创建一个私有字段(创建时填充)、一个私有父字段和一个公共父属性:

public class YourClassHere
{
    private YourClassHere _parent;
    private int _parentId;

    public YourClassHere Parent
    {
        get 
        { 
            if (_parent == null)
            {
                _parent = DBWrapper.GetMyClassById(_parentId)
            }
            return _parent
        }
    }
}

然后,从父数据的ID中读取父数据并创建一个对象(同一个类),然后将数据传递给它以初始化属性(与子数据完全相同)

以上只是一个例子。方法取决于您如何处理当前对象(子对象),并且您没有给我们任何代码来查看

从我所做的。它看起来像这样:

class Data {
    public Data(int pDataID) {
        // Load data of pDataID
        // Assign the loaded data

        this.parent = new Data(ParentID);
    }
}

我希望这足以让您适应您的需要。

您可能需要这样做

Parent = GetParentById(ParentID);

尽管这实际上取决于您如何实现数据访问层,但您必须递归地从数据库检索数据,以便正确地具体化对象,直到最后一条记录的ParentID为null。

我想您是手动生成数据库类的

您可以使用字典ID->对象,如下所示:

using System;
using System.Collections.Generic;

class Program {

    class Outer {

        static Dictionary<int, Outer> _ids = new Dictionary<int, Outer>();

        public Outer(int id) {
            _ids[id] = this;
        }

        public class Inner {
            public Outer Parent {
                get;
                set;
            }

            public Inner(int parentId) {
                Parent = Outer._ids[parentId];
            }

        }
    }

    static void Main(string[] args) {
        Outer o = new Outer(1);
        Outer.Inner i = new Outer.Inner(1);
    }
}
使用系统;
使用System.Collections.Generic;
班级计划{
类外部{
静态字典_id=新字典();
公共外部(内部id){
_id[id]=这个;
}
公共阶级内部{
公共外部父级{
得到;
设置
}
公共内部(int parentId){
父项=外部。_id[parentId];
}
}
}
静态void Main(字符串[]参数){
外部o=新的外部(1);
外部.内部i=新的外部.内部(1);
}
}

你也可以考虑使用.

谢谢你帮我做了这样的事情:

    Collection<smsPart> list = new Collection<smsPart>();
    Dictionary<int, smsPart> dic = new Dictionary<int, smsPart>();

    using (conn)
    {
        conn.Open();
        SqlDataReader dr = command.ExecuteReader();
        while (dr.Read())
        {
            smsPart xPart = new smsPart();

            xPart.ID = int.Parse(dr["ID"].ToString());
            if (!string.IsNullOrEmpty(dr["Parent"].ToString()))
                xPart.ParentID = int.Parse(dr["Parent"].ToString());
            xPart.Name = dr["Name"].ToString();

            dic.Add(xPart.ID, xPart);
        }
    }
    foreach (smsPart childPart in dic.Values)
    {
        if (childPart.ParentID > 0)
        {
            childPart.Parent = dic[childPart.ParentID];
        }
        list.Add(childPart);
    }
    return list;
集合列表=新集合();
Dictionary dic=新字典();
使用(康涅狄格州)
{
conn.Open();
SqlDataReader dr=command.ExecuteReader();
while(dr.Read())
{
smsPart xPart=新smsPart();
xPart.ID=int.Parse(dr[“ID”].ToString());
如果(!string.IsNullOrEmpty(dr[“Parent”].ToString())
xPart.ParentID=int.Parse(dr[“Parent”].ToString());
xPart.Name=dr[“Name”].ToString();
dic.Add(xPart.ID,xPart);
}
}
foreach(dic.值中的smsPart子零件)
{
如果(childPart.ParentID>0)
{
childPart.Parent=dic[childPart.ParentID];
}
列表。添加(childPart);
}
退货清单;

所以,在您看来,这是好的吗???。

这将是非常好的,但我只想从数据库中获取信息一次,我可以用更有效的方法吗??。
    Collection<smsPart> list = new Collection<smsPart>();
    Dictionary<int, smsPart> dic = new Dictionary<int, smsPart>();

    using (conn)
    {
        conn.Open();
        SqlDataReader dr = command.ExecuteReader();
        while (dr.Read())
        {
            smsPart xPart = new smsPart();

            xPart.ID = int.Parse(dr["ID"].ToString());
            if (!string.IsNullOrEmpty(dr["Parent"].ToString()))
                xPart.ParentID = int.Parse(dr["Parent"].ToString());
            xPart.Name = dr["Name"].ToString();

            dic.Add(xPart.ID, xPart);
        }
    }
    foreach (smsPart childPart in dic.Values)
    {
        if (childPart.ParentID > 0)
        {
            childPart.Parent = dic[childPart.ParentID];
        }
        list.Add(childPart);
    }
    return list;