В настоящее время я пытаюсь создать метод, который создаст запрос в С# LINQ, который даст мне тип файла, комбинированный размер типа файла и общее количество файлов этого типа. Я изо всех сил пытаюсь получить несколько столбцов и запросить размер файла. Кажется, это работает только в том случае, если я получаю размер файла отдельно, но все еще не могу их суммировать....
Этот работает только с размером файла:
var size = from f in files
select (new FileInfo(f).Length);
но здесь не работает, и я также не могу получить количество файлов:
var all = from f in files
group Path.GetExtension(f) by Path.GetExtension(f).ToLower() into fileGroup
select new {
Ext = fileGroup,
Byt = new FileInfo(fileGroup).Length
};
Обновлено:
Я смог сгруппировать по типу и количеству, но до сих пор не могу понять, как сложить размеры файлов по их типу:
var info = files.Select(f => Path.GetExtension(f).ToLower()).GroupBy(x => x, (t, c) => new {
Extension = t,
Count = c.Count(),
Size = new FileInfo(x).Length
Я получаю сообщение об ошибке для x
@ Siegfried.V Извините, я обновил последний пост и этот пост.
Таким образом, «файлы» должны быть перечислимыми, иметь количество или размер, который содержит количество файлов.
var size = from f in files
select (new FileInfo(f).Length);
Во-первых, я рекомендую вам переименовать параметр метода в filePaths
, потому что это строки, представляющие пути. Когда вы имеете дело с объектом FileInfo
, его лучше описать как «файл».
Вы приблизились к группе, важно то, что выбор впоследствии действует на данные группы.
Я собираюсь написать это с помощью методов расширения.
var fileDataByExtension = filePaths
.Select(fp => new FileInfo(fp))
.GroupBy(f => f.Extension)
.Select(group => new
{
Extension = group.Key,
TotalBytes = group.Sum(f => f.Length),
TotalFiles = group.Count()
});
filePaths
)FileInfo
объекты. Из него намного проще извлечь информацию о расширении и размере.Теперь у вас есть IEnumerable анонимных объектов.
спасибо @gunr2171 за это! Это действительно помогло!! Вы случайно не знаете, как я могу преобразовать его в XDocument? Я сейчас застрял на этой части. Я пытался XDocument x = new XDocument(fileDataByExtension)
, но получаю сообщение об ошибке «Невозможно добавить символы, не являющиеся пробелами, в контент».
Это будет ваш следующий вопрос. Не забудьте дать ему день или около того, чтобы действительно провести собственное исследование и сначала попробовать.
Во-первых, вы пытались решить свой вопрос, который вы задали 1 час назад? Сначала закройте этот вопрос, в конце концов запросите дополнительную информацию (мы все еще можем редактировать наши ответы), прежде чем создавать новый, который будет почти таким же.