linq与之前的项目比较

时间:2014-04-15 12:49:39

标签: linq

我需要过滤列表,删除所有项目的语言代码与之前的项目相同(项目按时间排序)。这样,我想检测所有过境点。

有没有办法用一行linq做到这一点?

var test = new List<Sample> {   new Sample("AT", "test1"),
                                new Sample("AT", "test2") ,
                                new Sample("AT", "test3") ,
                                new Sample("DE", "test4") ,
                                new Sample("DE", "test5") ,
                                new Sample("DE", "test6") ,
                                new Sample("AT", "test7") ,
                                new Sample("AT", "test8") ,
                                new Sample("AT", "test9") 
                            };


var borderChanges = new List<Sample>();
var lastCountry = ""; 
foreach (var sample in test)
{
    if (sample.country != lastCountry)
    {
        lastCountry = sample.country;
        borderChanges.Add(sample);
    }
}

2 个答案:

答案 0 :(得分:7)

我认为这就是你在寻找的东西:

test.Where((x,idx) => idx == 0 || x.Country != test[idx - 1].Country));

答案 1 :(得分:0)

foreach迭代中,无法访问序列的相邻元素。也许您的目标可以通过IEnumerable<T>的{​​{3}}扩展方法来实现,您可以在其中比较序列的相邻元素。