Linq查询帮助

k80*_*0sg 0 c# linq asp.net

有没有办法编写Linq语句来查找B列中的重复,并且只有在A列具有重复值时才能找到它,然后将列B的值添加到找到重复的列.任何帮助表示赞赏谢谢.

RecordID    CartID    Quantity    ProductID 
1             11         3           3
2             12         5           6
3             11         6           3
Run Code Online (Sandbox Code Playgroud)

删除记录3并将6添加到RecordID 1的数量,使其变为:

RecordID    CartID    Quantity    ProductID 
1             11         9           3
2             12         5           6
Run Code Online (Sandbox Code Playgroud)

Mar*_*mić 6

   var records = (from i in list
                 group i by i.CartID into g
                 select new Item()
                 {
                     RecordID = g.Min(o => o.RecordID),
                     CartID = g.Key,
                     Quantity = g.Sum(o => o.Quantity),
                     ProductID = g.Min(o => o.ProductID)
                 }).ToList();
Run Code Online (Sandbox Code Playgroud)

这会将所有具有相同CartId的项目数量相加,只会根据您的要求创建最小的事件RecordId和ProductId.选择min ProductId是我需要做的事情,以使查询工作.

这就是为什么我认为你错过了一些关于ProductId的分组 ......

你没有要求这个,但我认为这就是你想要的(因为不将苹果和梨组合在一起是常识).(它对提供的样本数据给出了相同的结果,但对于不同的ProductsIds,它会有不同的结果.

        var records = (from i in list
                        group i by new { cartID = i.CartID, prodID = i.ProductID } into g
                        select new Item()
                        {
                            RecordID = g.Min(o => o.RecordID),
                            CartID = g.Key.cartID,
                            Quantity = g.Sum(o => o.Quantity),
                            ProductID = g.Key.prodID
                        }).ToList();
Run Code Online (Sandbox Code Playgroud)

这是按CartID和ProductId分组的.Linq中的多字段分组是通过匿名类型实现的.