我有一个IList
的集合,其中我可以在其中看到重复的List
集。我怎样才能选择一个唯一的列表?
IList
个参数,
IList<OrderItemModifier> Modifiers;
public class OrderItemModifier
{
public int Id { get; set; }
public int MenuAnswerId { get; set; }
public int DatabaseId { get; set; }
public int Plu { get; set; }
public decimal Price { get; set; }
public string SpecialInstructions { get; set; }
public string ModifierDescription { get; set; }
public int Quantity { get; set; }
}
现在有一种情况,Modifiers
有两个条目(如下所示),其中两个条目相同,我想从中选择唯一条目。
示例,Modifiers
有两个条目,其中[0]&amp; [1]完全相同,我只想选择唯一的(这里[0])。
[0] {OrderItemModifier} - Same values
[1] {OrderItemModifier} - Same values
我尝试过但是没有用。
1.
var uniqueModifiersList = newItem.Modifiers.Distinct().ToList();
2.
HashSet<OrderItemModifier> uniqueModifiersList = new HashSet<OrderItemModifier>();
foreach (OrderItemModifier item in newItem.Modifiers)
{
uniqueModifiersList.Add(item);
}
3.
HashSet<OrderItemModifier> uniqueModifiersList = new HashSet<OrderItemModifier>(newItem.Modifiers);
有什么想法吗?
答案 0 :(得分:4)
var filteredList = Modifiers
.GroupBy(modifier => modifier.Id)
.Select(chunk => chunk.First());
答案 1 :(得分:0)
你应该有意义地重写Equals和GetHashCode,在这种情况下要比较ID:
public class OrderItemModifier
{
public int Id { get; set; }
public override bool Equals(object obj)
{
var typedObj = obj as OrderItemModifier;
return typedObj != null && typedObj.Id = this.Id;
}
public override int GetHashCode()
{
return this.Id;
}
}
现在你可以使用Distinct:
列出uniqueIDs = myList.Distinct()。ToList();