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

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扩展方法的积累很难调试。

09-25 21:41