0

選択されて永続化されたbasketId、ProductNameIdと呼ばれる2つのint値の形式のアイテムのリストがいくつかあります。たとえば、{{1,1} {1,2}、{1,3}}から上位のbasketId {{n、2} {n、6}、{n、6}、{n、6}、{ n、7}、{n、8}}。バスケットの数はさまざまであり、バスケットごとのエントリの数もさまざまです。

バスケットのすべてのセットに存在するIDごとに、ProductNameIdとMaxCountの形式で出力する必要があります。上記の2つの場合、これは次のようになります。1,1、2、1、3、1、6、3、7、1、8、1

私は次のコードを持っていて、それは動作しますが、それは醜くて長い間曲がりくねっているように見えるので、より良い方法/より簡潔なものを考え出すために少し助けを求めています-おそらく同じことをする単一のステートメント。

// Get all the baskets that have been saved
var baskets = Baskets.Where(x => x.MarketId == 1);

// Group and get count for each product in each basket
var counts = from q1 in all
group q1 by new 
{
    q1.ProductNameId,
    q1.BasketId
}
into g
select new
{
    ProductNameId = g.Key.ProductNameId,
    Count = g.Count ()
};

// Group products and find the Maximum count that exists
var max = from q2 in counts
group q2 by q2.ProductNameId
into g
select new
{
    ProductNameId = g.Key,
    Max = g.Max (x => x.Count)
};

// The distinct set of values present
var distinct = max.Distinct();
4

2 に答える 2

0

これを行うためのかなり簡単な方法は次のとおりです。

var query =
    baskets
        .ToLookup(b => b.ProductNameId)
        .Select(l => new
        {
            ProductNameId = l.Key,
            Max = l.Count(),
        });
于 2012-08-13T01:18:28.173 に答える
0

あなたの基礎となるデータはまだ私には少し不思議ですが、あなたのコードがどのように見えるかから、あなたはこれをやろうとしていると思います:

// Get all the baskets that have been saved  
var baskets = Baskets.Where(x => x.MarketId == 1);  

// Group and get count for each product in each basket 
var distinct = from q1 in baskets 
    group q1 by q1.ProductNameId into g
    select new
    {
        ProductNameId = g.Key,
        Max = (from q2 in g
            group q2.BasketId by q2.BasketId).Max (x => x.Count())
    };
于 2012-08-07T13:58:52.130 に答える