我有一个类似的字符串列表
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扩展方法的积累很难调试.