如何从列表集合中选择唯一列表?

时间:2015-09-22 14:17:29

标签: c#

我有一个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);

有什么想法吗?

2 个答案:

答案 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();