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)
更加有用,或許是一個查詢,使總數量爲每產品按產品編號排序:
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。 – Bikonja
儘管@Spender可以給出你需要的答案,但我仍然覺得設計有問題。具有不同數量的相同產品ID聽起來不錯。例如。在現實世界的情況下,如果你購買2包麪包,你不會看到在麪包包數量1價格5美元和麪包包數量1價格5美元兩倍的法案。而你會看到像麪包包數量2價格10美元的東西。您的場景與示例中的第一個場景類似。雖然它不在話題中,但我只想指出,你仍然可以重新設計它。 – srsyogesh