Запрос LINQ для типов файлов, размера и количества

В настоящее время я пытаюсь создать метод, который создаст запрос в С# 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

Во-первых, вы пытались решить свой вопрос, который вы задали 1 час назад? Сначала закройте этот вопрос, в конце концов запросите дополнительную информацию (мы все еще можем редактировать наши ответы), прежде чем создавать новый, который будет почти таким же.

Siegfried.V 23.11.2022 22:05

@ Siegfried.V Извините, я обновил последний пост и этот пост.

Julia Navarro 23.11.2022 22:19
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
128
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Таким образом, «файлы» должны быть перечислимыми, иметь количество или размер, который содержит количество файлов.

 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()
    });
  1. Начните со своей коллекции строк (filePaths)
  2. Заранее превратите все свои строки в FileInfo объекты. Из него намного проще извлечь информацию о расширении и размере.
  3. Группировать по расширению
  4. Для каждой группы (расширения)
    • Ключ - это расширение (.txt, .exe и т.д.)
    • Суммируйте длины всех групп (размер каждого файла)
    • Подсчитайте все записи группы

Теперь у вас есть IEnumerable анонимных объектов.

спасибо @gunr2171 за это! Это действительно помогло!! Вы случайно не знаете, как я могу преобразовать его в XDocument? Я сейчас застрял на этой части. Я пытался XDocument x = new XDocument(fileDataByExtension), но получаю сообщение об ошибке «Невозможно добавить символы, не являющиеся пробелами, в контент».

Julia Navarro 23.11.2022 23:37

Это будет ваш следующий вопрос. Не забудьте дать ему день или около того, чтобы действительно провести собственное исследование и сначала попробовать.

gunr2171 24.11.2022 00:14

Другие вопросы по теме