如何从列表中删除重复值但希望包含该列表中的所有空字符串

时间:2017-01-19 09:53:45

标签: c# linq morelinq

我有一个对象列表,我想在其中删除重复但不想删除空白对象。 我正在使用DistinctBy lambda表达式。但它也消除了重复。 任何人都可以帮我提供传递空白的条件并仅检查对象中具有适当值的对象吗?

2 个答案:

答案 0 :(得分:1)

您可以使用非常简单的扩展方法:

    public static void DistinctKeepingEmptyStrings(this List<string> list) {
        var support = new List<string>(list);
        HashSet<string> knownValues = new HashSet<string>();
        foreach (var aString in list) {
            if (aString == "" || knownValues.Add(aString)) {
                support.Add(aString);
            }
        }
        list.Clear();
        list.AddRange(support);
    }

答案 1 :(得分:0)

示例:

var list在这种情况下是一个由所有重复项组成的列表(减去空字符串) 然后我只是遍历重复项并从listOfValues中删除它们。

List<string> listOfValues = new List<string> {"test", "test2", "", "test2", "", ""};
var list = listOfValues.GroupBy(r => r).SelectMany(grp => grp.Skip(1)).Where(r => r != "");
foreach (var aVar in list)
{
    listOfValues.Remove(aVar);
}