C# 从多个类访问属性
我正在创建一个web应用程序,我有两个类:C# 从多个类访问属性,c#,asp.net,C#,Asp.net,我正在创建一个web应用程序,我有两个类: public class MOrderMain { public int ID { get; set; } public int CompanyID { get; set; } public string CompanyName { get; set; } public DateTime OrderDate { get; set; } public string BillingName { get; set; }
public class MOrderMain
{
public int ID { get; set; }
public int CompanyID { get; set; }
public string CompanyName { get; set; }
public DateTime OrderDate { get; set; }
public string BillingName { get; set; }
public string BillingAddress { get; set; }
public string DeliveryName { get; set; }
public string DeliveryAddress { get; set; }
}
public class MOrder
{
public int ID { get; set; }
public int OrhID { get; set; }
public int ProID { get; set; }
public string Name { get; set; }
public int Quantity { get; set; }
public double Rate { get; set; }
public double Amount { get; set; }
public int DeliveredQty { get; set; }
}
我想从这两个类中检索详细信息。例如,我想
classMorderMain
中的ID
和Billing Name
以及classMOrder
中的所有属性。我该怎么做
我通过数据库获取这些值。我有查询,但如何分配数据以及如何从两者中检索数据
var mylist = new List<MOrder>();
_con = _db.GetConnection();
if (_con.State.Equals(ConnectionState.Closed))
{
_con.Open();
}
_cmd = new SqlCommand("Get_All_Order_Details", _con)
{ CommandType = CommandType.StoredProcedure };
_dr = _cmd.ExecuteReader();
while (_dr.Read())
{
mylist.Add(new MOrder
{
ID = Convert.ToInt32(_dr["ordID"]),
OrhID = Convert.ToInt32(_dr["orhID"]),
ProID = Convert.ToInt32(_dr["proID"]),
Name = _dr["pName"].ToString(),
Quantity = Convert.ToInt32(_dr["ordQty"]),
Rate = Convert.ToDouble(_dr["ordRate"]),
Amount = Convert.ToDouble(_dr["ordAmount"]),
DeliveredQty = Convert.ToInt32(_dr["ordQtyDelivered"])
});
}
return mylist;
var mylist=new List();
_con=_db.GetConnection();
if(_con.State.Equals(ConnectionState.Closed))
{
_con.Open();
}
_cmd=new-SqlCommand(“获取所有订单详细信息”,\u con)
{CommandType=CommandType.StoredProcess};
_dr=_cmd.ExecuteReader();
而(_dr.Read())
{
mylist.Add(新MOrder)
{
ID=Convert.ToInt32(_-dr[“ordID”]),
OrhID=Convert.ToInt32(_-dr[“OrhID”]),
ProID=Convert.ToInt32(_-dr[“ProID”]),
名称=_dr[“pName”].ToString(),
数量=转换为32(_dr[“ordQty”]),
Rate=Convert.ToDouble(_dr[“ordRate”]),
金额=转换为双倍(_dr[“ordAmount”]),
交付数量=转换为32(_dr[“ordQtyDelivered”])
});
}
返回mylist;
由于您要从数据库中的两个表中检索数据,但希望在应用程序中组合它们,因此解决方案是创建一个类,其中包含从存储过程返回的数据:
public class MAllOrderDetails
{
public int ID { get; set; }
public string BillingName { get; set; }
// include the other billing details you want here
public int OrhID { get; set; }
public int ProID { get; set; }
public string Name { get; set; }
public int Quantity { get; set; }
public double Rate { get; set; }
public double Amount { get; set; }
public int DeliveredQty { get; set; }
}
然后,您的查询将更改为填写列表
这使得您的应用程序只处理单个类的集合,所有数据都很好地包含在单个对象中
var mylist = new List<MAllOrderDetails>();
//...
while (_dr.Read())
{
mylist.Add(new MAllOrderDetails
{
ID = Convert.ToInt32(_dr["ordID"]),
BillingName = _dr["BillingName"].ToString(),
// etc.
OrhID = Convert.ToInt32(_dr["orhID"]),
ProID = Convert.ToInt32(_dr["proID"]),
Name = _dr["pName"].ToString(),
Quantity = Convert.ToInt32(_dr["ordQty"]),
Rate = Convert.ToDouble(_dr["ordRate"]),
Amount = Convert.ToDouble(_dr["ordAmount"]),
DeliveredQty = Convert.ToInt32(_dr["ordQtyDelivered"])
});
}
但是,我觉得从可维护性的角度来看,这比创建额外的类更令人头疼。为了回答您的问题,您需要说明数据是如何从存储过程返回的。您是在OrderMain和Order表之间进行内部联接,还是从这两个表中进行选择并返回两个结果集,一个带有“Order header”(OrderMain),另一个带有所有订单项(Order)?我是在联接并返回特定的数据。也就是说,通过从两个表中连接,我可以完美地获得ID、账单数据和剩余订单详细信息。我只需要知道这种方法是否正确,如何避免重复属性我有这种方法,但我想保持类的不同。有什么方法可以实现继承或接口吗?@MoizKachwala,我不认为继承或使用接口可以帮助您实现这一点,但我已经更新了我的答案,包括我能想到的唯一一个限制您拥有的类数量的解决方案。我仍然建议创建一个新类,即使它复制了其他类的一些属性,因为它将更易于维护。如果你想节省之前重复上课的费用,那么你以后在尝试与他们合作时就会付出代价。谢谢你的回复。我这样做是通过创建一个新类,并复制一些字段。
class MAllOrderDetails
{
public MOrder Order { get; set; }
public MOrderMain OrderMain { get; set; }
}