1

Webアプリケーションを作成していますが、次の2つのクラスがあります。

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

両方のクラスから詳細を取得したいと思います。たとえば、クラスから取得したり、クラスからすべてのプロパティを取得 IDしたりBilling NameMorderMainます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;
4

1 に答える 1

0

データベースの両方のテーブルからデータを取得しているが、アプリケーションでそれらを結合したいので、解決策は、ストアド プロシージャから返すデータを含む単一のクラスを作成することです。

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

次に、クエリが a の入力に変わりますList<MAllOrderDetails>

これにより、アプリケーションは、単一のオブジェクトに適切に含まれるすべてのデータを持つ単一のクラスのコレクションのみを処理することになります。

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"])
     });
}

アップデート

追加のクラスを作成しないための最も近い解決策として、おそらくこれを回避できます。

class MAllOrderDetails
{
    public MOrder Order { get; set; }
    public MOrderMain OrderMain { get; set; }
}

ただし、保守性の観点からすると、追加のクラスを作成するだけでなく、頭痛の種になると思います。

于 2012-08-29T16:39:48.793 に答える