Это решение делает только один выбор из YourTable, поэтому он быстрее. Он работает только для MySQL и SQLite (для SQLite удаляет DESC) в соответствии с тестом на sqlfiddle.com. Возможно, он может быть настроен для работы на других языках, с которыми я не знаком.
SELECT *
FROM ( SELECT *
FROM ( SELECT 1 as id, 1 as rev, 'content1' as content
UNION
SELECT 2, 1, 'content2'
UNION
SELECT 1, 2, 'content3'
UNION
SELECT 1, 3, 'content4'
) as YourTable
ORDER BY id, rev DESC
) as YourTable
GROUP BY id
Как насчет чего-то типа:
var lines = System.IO.File.ReadAllLines("...");
System.IO.File.WriteAllLines("...", lines.Take(lines.Length - 1).ToArray());
Объяснение:
Технически вы не удаляете строку из файла. Вы читаете содержимое файла и записываете его обратно, исключая контент, который хотите удалить.
. Что этот код делает, это прочитать все строки в массиве и записать эти строки обратно в файл, исключая только последние линия. (Метод Take () (часть LINQ) принимает количество строк, указанное в нашем случае, length - 1). Здесь var lines
можно прочитать как String[] lines
.
Вы не можете удалить конец строки, так как File.WriteAllLines автоматически добавляет его, однако вы можете использовать этот метод:
public static void WriteAllLinesBetter(string path, params string[] lines)
{
if (path == null)
throw new ArgumentNullException("path");
if (lines == null)
throw new ArgumentNullException("lines");
using (var stream = File.OpenWrite(path))
using (StreamWriter writer = new StreamWriter(stream))
{
if (lines.Length > 0)
{
for (int i = 0; i < lines.Length - 1; i++)
{
writer.WriteLine(lines[i]);
}
writer.Write(lines[lines.Length - 1]);
}
}
}
Это не мое, я нашел его в .NET File.WriteAllLines оставляет пустую строку в конце файла