C# 按产品id区分
下面是我的班级C# 按产品id区分,c#,C#,下面是我的班级 public class MyGroceryListItems { public int ProductId { get; set; } public string ProductName { get; set; } public int Quantity { get; set; } } 现在,我从数据库中获取这个类的值,并将这些类放入IList。但是,有些重复的项目具有相同的id,但数量不同。如何通过id仅获取不同的条目 我尝试了list.dist
public class MyGroceryListItems
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public int Quantity { get; set; }
}
现在,我从数据库中获取这个类的值,并将这些类放入IList
。但是,有些重复的项目具有相同的id
,但数量不同。如何通过id
仅获取不同的条目
我尝试了list.distinct,但没有成功,因为在具有相同产品id的记录中,并非所有条目都相同。您可以实现一个相等比较器。msdn上有一个很好的例子:
<>这会给你更多的控制,你认为哪些项目是平等的。但是需要更多的编码。如果您想从共享一个id的所有项目中选择一个或多个随机项目,那么您最好使用spender的解决方案您可以实现一个相等比较器。msdn上有一个很好的例子:
IEnumerable<MyGroceryListItems> items = ...;
var uniqueItemsByProdId =
items.GroupBy(x => x.ProductId).Select(g => g.First());
<>这会给你更多的控制,你认为哪些项目是平等的。但是需要更多的编码。如果您想从共享一个id的所有项目中选择一个或多个随机项目,那么您最好使用spender的解决方案
IEnumerable<MyGroceryListItems> items = ...;
var uniqueItemsByProdId =
items.GroupBy(x => x.ProductId).Select(g => g.First());
像这样:
items.DistinctBy(x => x.ProductId)
也许更有用的是一个查询,它按ProductId给出每个项目的合计数量:
items
.GroupBy(x => x.ProductId)
.Select(g => new MyGroceryListItems{
g.Key.ProductId,
g.Key.ProductName,
Quantity = g.Sum(gg => gg.Quantity)
})
像这样:
items.DistinctBy(x => x.ProductId)
也许更有用的是一个查询,它按ProductId给出每个项目的合计数量:
items
.GroupBy(x => x.ProductId)
.Select(g => new MyGroceryListItems{
g.Key.ProductId,
g.Key.ProductName,
Quantity = g.Sum(gg => gg.Quantity)
})
如果有多个具有相同ID的条目,您希望获取哪个条目?为什么会有多个具有相同ID的条目?如果它是同一个ID,那么它应该是同一个对象,否则它就不是真的和ID。尽管@Spender可以给出你所需要的答案,但我仍然觉得设计有问题。同一个产品id,数量不同,听起来不太好。例如,在现实世界中,如果你买了两包面包,你不会在账单上看到面包包数量1的价格是5美元,而面包包数量1的价格是5美元的两倍。相反,你会看到像面包包数量2价格10美元。您的场景与示例中的第一个场景类似。虽然这不是主题,但我只是想指出,你仍然可以重新设计它。@srsyogesh,最近我在商店买了两个袋子来装我买的东西,当它们经过现金箱后,我突然决定再拿一个。。这里我们有“第一个场景”=D@srsyogesh:我在帖子的结尾添加了一些内容来解决这个问题。如果有多个条目具有相同的ID,您希望获取哪个条目?为什么会有多个条目具有相同的ID?如果它是同一个ID,那么它应该是同一个对象,否则它就不是真的和ID。尽管@Spender可以给出你所需要的答案,但我仍然觉得设计有问题。同一个产品id,数量不同,听起来不太好。例如,在现实世界中,如果你买了两包面包,你不会在账单上看到面包包数量1的价格是5美元,而面包包数量1的价格是5美元的两倍。相反,你会看到像面包包数量2价格10美元。您的场景与示例中的第一个场景类似。虽然这不是主题,但我只是想指出,你仍然可以重新设计它。@srsyogesh,最近我在商店买了两个袋子来装我买的东西,当它们经过现金箱后,我突然决定再拿一个。。这里我们有“第一个场景”=D@srsyogesh当前位置我在帖子末尾添加了一些内容,以解决这个问题。