IEnumerable<MyGroceryListItems> items = ...;
var uniqueItemsByProdId =
items.GroupBy(x => x.ProductId).Select(g => g.First());
如果多个项目与另一个项目共享 ProductId,这将挑选一个(并且有些随意)项目。
或者(并且稍微快一点),您可以使用DistinctBy
扩展名:
public static IEnumerable<T>
DistinctBy<T,TKey>(this IEnumerable<T> src, Func<T,TKey> selector)
{
HashSet<TKey> hs = new HashSet<TKey>();
foreach(var item in src)
{
//Add returns false if item is already in set
if(hs.Add(selector(item)))
{
yield return item;
}
}
}
像这样:
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)
})