首页> C#>如何应用包含在最后的记录和删除如果在LINQ找到?

我有一个类似的字符串列表

AAPL,28/03/2012,88.34,88.778,87.187,88.231,163682382
AAPL,29/03/2012,87.54,88.08,86.747,87.123,151551216
FB,30/03/2012,86.967,87.223,85.42,85.65,182255227

现在,我只想使用LINQ删除最后一条记录(如果它不包含AAPL(符号名)).

在下面,我编写了包含多行代码的代码,但我想将其设置为单行代码,

fileLines = System.IO.File.ReadAllLines(fileName).AsParallel().Skip(1).ToList();
var lastLine = fileLines.Last();
if (!lastLine.Contains(item.sym))
{
    fileLines.RemoveAt(fileLines.Count - 1);
}

那么,如何在单行linq查询中完成所有操作?

解决方法:

您可以使用三元运算符确定要连接的尾部,如下所示.

fileLines
    = fileLines.Take(fileLines.Count())
               .Concat(fileLines.Last().Contains(item.sym) ? Enumerable.Empty
                                                           : new string[]{ item.sym });

您可以按如下所示进一步简化.

fileLines
    = System.IO.File.ReadAllLines(fileName)
                    .AsParallel()
                    .Skip(1)
                    .Take(fileLines.Count())
                    .Concat(fileLines.Last().Contains(item.sym) ? Enumerable.Empty
                                                                : new string[]{ item.sym });
                    .ToList();

话虽如此,这样的努力值得怀疑.延迟评估的Linq扩展方法的积累很难调试.

上一篇:C#-读写8位以上的符号


下一篇:C#文件操作之把字符串取到文本文件及把文本文件读取到字符串中