0

次のLINQクエリがあります

 var unallocatedOrders = (from orderLine in context.OrderLineItemDboes
     where (orderLine.Status == unallocated || orderLine.Status == null)
         && orderLine.orderline.order.order_status_fk == verified
     group orderLine
         by new { orderLine.orderline.ol_id,orderLine.orderline.order.order_id }
         into g
     select new { OrderLineId = g.Key.ol_id, Count = g.Count(), OrderId = g.Key.order_id })
 .ToList();

上記のクエリにより、次のように結果が得られます

Order1 ol1 2
order1 ol2 3
order1 ol3 1
order2 ol1 1
order2 ol2 2
order3 ol1 4
order3 ol2 3
order3 ol3 2

注文 ID に基づいて上記のリストを繰り返し処理し、対応する行と数量を取得する必要があります。このライン ID と数量をディクショナリに取得する必要があります。誰かがどうすればそれを成し遂げることができるかを提案できますか.

ありがとう

4

1 に答える 1

1

GroupBy を使用して項目を選択する方法を次に示します。(あなたの質問では、行をどのように使用するかを実際に指定していないため、デバッグ コンソールに出力するだけです。)

// group by the OrderId
foreach (var group in unallocatedOrders.GroupBy(row => row.OrderId))
{
    Debug.WriteLine(

        // for each line, output "Order x has lines y1, y2, y3..."
        string.Format("Order {0} has lines {1}", 

            // here the key is the OrderId
            group.Key,

            // comma-delimited output
            string.Join(", ", 

                // select each value in the group, and output its OrderLineId, and quantity
                group.Select(item => 
                    string.Format("{0} (quantity {1})", item.OrderLineId, item.Count)
                )
            )
        )
    );
}

を使用して辞書検索を取得できますToDictionary

// two-level lookup: 1) OrderId 2) OrderLineId
var lookup = new Dictionary<int, Dictionary<int, long>>();

foreach (var group in unallocatedOrders.GroupBy(row => row.OrderId))
{
    // add each order to the lookup
    lookup.Add(group.Key, group.ToDictionary(

        // key selector 
        keySelector: item => item.OrderLineId,

        // value selector
        elementSelector: item => item.Count()
    ));
}
于 2012-11-06T17:13:53.007 に答える