選択されて永続化された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();