// removing duplicities from Dictionary
        var removables = data.ToLookup(x => x.Value, x => x.Key)
            .SelectMany(x => x.Skip(1)).ToList();
        foreach (var key in removables)
            data.Remove(key);


这段代码在下面的输入(数据)下效果很好:

102030;"http://xxx.yyy.com/102030.ashx"
102030;"http://xxx.yyy.com/102030_x.ashx"


102030;"http://xxx.yyy.com/102030_x.ashx"被删除。

但是当我输入以下内容时:

102030;"http://xxx.yyy.com/102030_x.ashx"
102030;"http://xxx.yyy.com/102030.ashx"


102030;"http://xxx.yyy.com/102030.ashx"被删除。
但是我只需要删除包含“ _”的项目。

如何解决这个问题呢 ?是否可以按长度对输入进行排序或调整linq查询?

最佳答案

如果要跳过带下划线的元素,则不应跳过第一个元素,而保留所有不带下划线的元素:

// smart removing duplicities from Dictionary
var removables = data.ToLookup(x => x.Value, x => x.Key)
                     .SelectMany(x => x.Where(y => !y.Key.Contains('_')).ToList();
foreach (var key in removables)
    data.Remove(key);

10-08 14:40