如果我的问题不明确,我很抱歉。
我有一个类包含一些属性,其中一个属于“Parent”,它与此类的类型相同。
当我从数据库中读取数据时,我为每个属性设置了合适的值。 但是当我从数据库中读取“ParentID”时,我怎么能把“Parent”属性。
如果不清楚我会把示例。
非常感谢你。
这是我的班级:
class smsPart
{
private int _id;
private smsPart _parent;
private string _name;
public int ID
{
get { return _id; }
set { _id = value; }
}
public smsPart Parent
{
get { return _parent; }
set { _parent = value; }
}
public string Name
{
get { return _name; }
set { _name = value; }
}
public smsPart()
{
this._id = 0;
this._parent = null;
this._name = null;
}
public smsPart(int pID, smsPart pParent, string pName, smsType pType)
{
this._id = pID;
this._parent = pParent;
this._name = pName;
}
}
当我从数据库中读取数据时,我将“ID”填充为int,将“Name”填充为字符串。
但当我从数据库中读取“ParentID”int时,我将如何将“Parent”设置为“smsPart”。??
答案 0 :(得分:1)
如果您想使用延迟评估,一种方法是为ParentId创建一个私有字段,您可以在创建时填充私有字段,私有父字段和公共父属性:
public class YourClassHere
{
private YourClassHere _parent;
private int _parentId;
public YourClassHere Parent
{
get
{
if (_parent == null)
{
_parent = DBWrapper.GetMyClassById(_parentId)
}
return _parent
}
}
}
答案 1 :(得分:1)
我想你手动生成了数据库类......
您可以使用字典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);
}
}
您也可以考虑使用linq to sql。
答案 2 :(得分:0)
然后从其ID中读取父数据并创建一个对象(同一个类),然后将数据传递给它以初始化属性(就像对子项一样)。
以上只是一个例子。这样做的方法取决于你如何处理当前对象(孩子),你没有给我们任何代码来看。
从我所做的。它看起来与此相似:
class Data {
public Data(int pDataID) {
// Load data of pDataID
// Assign the loaded data
this.parent = new Data(ParentID);
}
}
我希望这足以让你适应它以适应你的。
答案 3 :(得分:0)
你可能需要做这样的事情
Parent = GetParentById(ParentID);
虽然这实际上取决于您如何实施数据访问层
答案 4 :(得分:0)
您必须以递归方式从数据库中检索数据才能正确实现对象,直到最后一条记录的ParentID为空。
答案 5 :(得分:0)
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;
你认为这样做很好吗?