Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从多个类访问属性_C#_Asp.net - Fatal编程技术网

C# 从多个类访问属性

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; }

我正在创建一个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 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; }
}
我想从这两个类中检索详细信息。例如,我想 class
MorderMain
中的
ID
Billing Name
以及class
MOrder
中的所有属性。我该怎么做

我通过数据库获取这些值。我有查询,但如何分配数据以及如何从两者中检索数据

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; }
}