3

データベースのレコードごとに最大3つのラインアイテムを保存するOMSを使用しています。

以下は、5つのラインアイテムを含む注文の例です。

Order Header
Order Detail
   Prod 1
   Prod 2
   Prod 3
Order Detail
   Prod 4
   Prod 5

1つの注文ヘッダーレコードと2つの詳細レコード。

私の目標は、詳細レコードに1対1の関係を持たせることです(つまり、ラインアイテムごとに1つの詳細レコード)。以前は、UNION ALLSQLステートメントを使用してデータを抽出していました。LINQを使用してこの問題に対するより良いアプローチはありますか?

以下は、LINQを使用する最初の試みです。フィードバック、提案、推奨事項をいただければ幸いです。私が読んだことについて、UNION声明はプロセスに課税することができますか?

var orderdetail =
    (from o in context.ORDERSUBHEADs
        select new { 
            edpNo = o.EDPNOS_001, price = o.EXTPRICES_001, 
            qty = o.ITEMQTYS_001 }
    ).Union(from o in context.ORDERSUBHEADs
        select new { edpNo = o.EDPNOS_002, price = o.EXTPRICES_002, 
            qty = o.ITEMQTYS_002 }
    ).Union(from o in context.ORDERSUBHEADs
        select new { edpNo = o.EDPNOS_003, price = o.EXTPRICES_003, 
            qty = o.ITEMQTYS_003 });
4

1 に答える 1

1

Idは単純なサブクラスを構築します

class Record 
{
    public object SubHeading { get; set; }
    public int EdpNo { get; set; }
    public decimal Price { get; set; }
    public int Quantity { get; set; }
}

次に、すべてをループします

var orders = context.ORDERSUBHEADs.Select(o => 
   new Record[] {
      new Record { SubHeading = o, EdpNo = o.EDPNOS_001, Price = o.EXTPRICES_001, Quantity = o.ITEMQTYS_001 },
      new Record { SubHeading = o, EdpNo = o.EDPNOS_002, Price = o.EXTPRICES_002, Quantity = o.ITEMQTYS_002 },
      new Record { SubHeading = o, EdpNo = o.EDPNOS_003, Price = o.EXTPRICES_003, Quantity = o.ITEMQTYS_003 }
   }
);

IEnumerable allOrders = IEnumerable.Empty;
foreach(Record[] r in orders)
    allOrders = allOrders.Concat(r);

IEnumerable allRecords = allOrders.Cast<Record>();

しかし、率直に言って、あなたのo構造はひどいです、あなたはアイテムのリストをではなく、IEnumerableまたはIListまたは何かとして構築するべき#Parameters * #Rowsです。

于 2010-05-10T22:27:47.023 に答える