Как я могу сделать этот запрос в Linq? - PullRequest
0 голосов
/ 18 марта 2019

У меня есть список путей в базе данных.

\\apollon\HardDev\01_Elektronik\***
\\apollon\Sales\Kunden\S\***
\\apollon\HardDev\02_Optik\Optik\***_Projekte_Salb\***
\\apollon\Sales\Kunden\O\***\Auftrag 2002_2008-09-09
\\apollon\Sales\Kunden\H\***\Auftrag 4534_2013-07-26
\\apollon\User\***\quickies_2016\BSI_screenshots\Neuer Ordner
\\apollon\Sales\Kunden\G\***\Auftrag 2153_2009-06-24
\\apollon\HardDev\01_Elektronik\***\bestuecker_afem_v12
\\apollon\User\***\quickies_2015\src_***
\\apollon\Sales\Kunden\H\***\4352IO_2013-06-07
etc.

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

Пример:

Функция получает путь

\\apollon\User\Walzenbach

и в результате я хотел бы знать, что путь имеет следующие подпапки

{dir = "\\apollon\User\Walzenbach\docs", subfolderCount = 2}
{dir = "\\apollon\User\Walzenbach\doku", subfolderCount = 0}
{dir = "\\apollon\User\Walzenbach\backup", subfolderCount = 10}

Это означает, что папка docs имеет 2 подпапки, папка doku не имеет подпапок, а резервная копия содержит 10 подпапок.

SQL пойдет в этом направлении. Но я также не уверен, что это лучший SQL-запрос для него, и он мне тоже нужен в Linq

Заранее спасибо за помощь

Ответы [ 3 ]

1 голос
/ 18 марта 2019

Вот предложение:

var query=from d in directories
          join sf in directories on d.Path equals sf.ParentPath into grp1
          from sf in grp1.DefaultIfEmpty()
          let result=new {dir=d,sub=sf}
          where reault.dir.Path.StartsWith(path)
          group result by result.dir.Path into grp2
          select new {dir=grp2.Key,subFolderCount=grp2.Count()};
1 голос
/ 18 марта 2019

Рассмотрите возможность использования DirectoryInfo.EnumerateDirectories

string directoryName = "\\apollon\User\Walzenbach"
DirectoryInfo directory = new DirectoryInfo(directoryName);
// TODO: exception if !directory.Exists;

var result = directory.EnumerateDirectories()
    .Select(subDirectory => new
    {
        SubDirectory = subDirectory,       // This is a DirectoryInfo

        // if you prefer the name, instead of the Directory:
        SubDirectoryName = subDirectory.Name,

        // count the number of subfolders of this subfolder:
        SubFolderCount = subFolder.EnumerateDirectories().Count(),
    });

Простой коммонаж!

0 голосов
/ 18 марта 2019

Так что теперь у меня есть SQL, который хотя бы разумно делает то, что я хочу ... Но Linqer не может перевести его в Linq

SELECT [Directory], subfolderCount = 
    (SELECT COUNT([Directory])
    FROM [ArgesPerm].[argarm].[dirs]
    WHERE lower([Directory]) LIKE '\\apollon\user\walzenbach\%'
    GROUP BY [Directory])
FROM [ArgesPerm].[argarm].[dirs]
WHERE lower([Directory]) LIKE '\\apollon\user\walzenbach\%'
AND LEN(SUBSTRING([Directory], 3, 10000)) - Len(Replace(SUBSTRING([Directory], 3, 10000), '\', '')) < 3
GROUP BY [Directory]
ORDER BY [Directory]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...