0

グリッドの注文情報の近くに OrderDetails Count を表示したいのですが、select Unit では Key と Count しか選択できません。注文情報の選択方法は?

var Q = from Data in Context.Orders
        join D2 in Context.OrderDetails on Data.OrderID equals D2.OrderID
        group Data by Data.OrderID into grouped
                       select new
                              {
                                  grouped=g.Key,
                                  Count = grouped.Count() 
                              };
4

3 に答える 3

2

次のような注文エンティティ全体でグループ化できます

var Q = from Data in Context.Orders
        join D2 in Context.OrderDetails on Data.OrderID equals D2.OrderID
        group Data by Data into grouped
                       select new
                              {
                                  OrderId = grouped.Key.OrderId,
                                  OrderDate = grouped.Key.OrderDate
                                  Shipping = grouped.Key.Shipping
                                  .
                                  .
                                  .
                                  Count = grouped.Count() 
                              };

オブジェクトのメモリ コレクション内で同様のクエリを実行するためのEDIT Linqpad プログラム

void Main()
{
    var orders = new List<Order>{
        new Order{OrderId = 1, DeliverIn = 5},
        new Order{OrderId = 2, DeliverIn = 6},
        new Order{OrderId = 3, DeliverIn = 5},
    };

    var lines = new List<OrderLine>{
      new OrderLine{LineId = 1, OrderId = 1, ProductId = 1},
      new OrderLine{LineId = 2, OrderId = 1, ProductId = 2},
      new OrderLine{LineId = 3, OrderId = 1, ProductId = 3},

      new OrderLine{LineId = 4, OrderId = 2, ProductId = 1},
      new OrderLine{LineId = 5, OrderId = 2, ProductId = 3},
      new OrderLine{LineId = 6, OrderId = 2, ProductId = 4},
    };

    var query = from o in orders join l in lines on
            o.OrderId equals l.OrderId
            group o by o into grouped
            select new 
            {
                Count = grouped.Count(),
                grouped.Key.OrderId,
                grouped.Key.DeliverIn
            };
            Console.WriteLine(query);
}

// Define other methods and classes here
public class Order
{
    public int OrderId{get;set;}
    public int DeliverIn{get;set;}

}

public class OrderLine
{
    public int LineId{get;set;}
    public int OrderId{get;set;}
    public int ProductId{get;set;}
}

linq pad をお持ちでない場合は、サイトから入手してください。それは単に素晴らしいです。

于 2012-05-24T05:29:58.550 に答える
1

MSDN でIGrouping のドキュメントを確認してください。

public interface IGrouping<out TKey, out TElement> : IEnumerable<TElement>, 
IEnumerable

IEnumerableに注意してください。Count は IEnumerable の単なる拡張メソッドです。グループ化から簡単に選択したり、ループしたりできます。

例えば:

var Q = from Data in Context.Orders
    join D2 in Context.OrderDetails on Data.OrderID equals D2.OrderID
    group Data by Data.OrderID into grouped
                   select new
                          {
                              grouped=g.Key,
                              Count = grouped.Count(),
                              Orders = grouped.ToArray() 
//you can also just return grouped itself to support lazy queries
                          };
于 2012-05-24T05:24:00.710 に答える
0

それらを配列またはリストにフラット化してから、そのカウントを取得します。

select new
{
    Key = g.Key,
    Orders = grouped.ToArray()
};

次に、カウントを取得します。

int count = result.Orders.Count; // Property of an array.
于 2012-05-24T05:39:16.203 に答える