从c#中的列表中删除重复项

时间:2017-06-21 15:47:20

标签: c# linq

我有类型列表

public class MyClass
{        
    public SomeOtherClass classObj;         
    public string BillId;           
}

public List<MyClass> myClassObject;

示例值:

BillId = "123",classObj = {},
BillId = "999",classObj = {},
BillId = "777",classObj = {},
BillId = "123",classObj = {}

因此,在上面的例子中,我们有BillId的重复值。我想删除所有重复值(不区分),因此结果只包含999&amp; 777值。

达到此目的的一种方法

  • 循环浏览所有项目
  • 获取唯一BillId
  • 的统计数据
  • 如果count大于1,请将BillId存储在另一个变量中
  • 再次循环并根据BillId
  • 删除项目

有没有直接的方法来实现这个目标?

5 个答案:

答案 0 :(得分:12)

我认为这样可行:

var result = myClassObject.GroupBy(x => x.BillId)
    .Where(x => x.Count() == 1)
    .Select(x => x.First());

小提琴here

答案 1 :(得分:3)

你也可以这样做,

var result = myClassObject.GroupBy(x => x.BillId)
              .Where(x => !x.Skip(1).Any())
              .Select(x => x.First());

FIDDLE

答案 2 :(得分:1)

这可能有所帮助。

var result = myClassObject
          .GroupBy(x => x.BillId)
          .Where(x => x.Count()==1)
          .Select(x => x.FirstOrDefault());

答案 3 :(得分:0)

试试这个。

var distinctList = myClassObject.GroupBy(m => m.BillId)
                                .Where(x => x.Count() == 1)
                                .SelectMany(x => x.ToList())
                                .ToList();

答案 4 :(得分:0)

.Where(x => x.Count()==1)对我不好。

您可以尝试:

.GroupBy(x => x.codeLigne).Select(x => x.First()).ToList()