我有两个int值的形式的项目列表,名为basketId,ProductNameId,它们已被选中并保留。例如{{1,1} {1,2},{1,3}}到一些上层basketId {{n,2} {n,6},{n,6},{n,6},{ N,7},{N,8}}。篮子的数量会有所不同,每个篮子的入场数量可能会有所不同。LINQ组合并获得不同的最大发生次数
我需要输出的形式为ProductNameId和Max Count,用于存在于所有篮子集合中的每个ID。对于上面显示的这两个,这将是: 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();
你能澄清你的数据吗?它基本上是'List'哪里篮子有'ProductNameId'和'BasketId'两个整数?而且,如果是这样,一些示例数据是什么样的,你想从中得到什么? –
2012-08-07 14:01:54
因此,例如,如果你有这样的:{{ 1,1}, {1,2}, {1,3}, {1,2}, {1,3},{ 2,2 }, {2,3}, {1,4}, {1,5} }你会期待这个结果:? {ProductNameId = 1,Max = 1},{ProductNameId = 2,Max = 3},{ProductNameId = 3,Max = 3},{ProductNameId = 4,Max = 1},{ProductNameId = 5,Max = 1}, – eburgos 2012-08-07 14:09:14
篮子基本上是一个有两列的产品,BasketId(购物篮有内容)和ProductNameId(产品类型已被购买)。在任何一天中都有数百个独特的BasketId记录,并且对于每个不同的BasketId值,通常有5到50个ProductNameId值。当客户购买多种相同产品类型时,其中一些值会出现一次以上。他们可以例如购买两种不同的麦片或糖果,篮子将包含两个记录 – 2012-08-09 04:33:35