First of all, I strongly recommend to generate your data model classes using T4 templates, so take a look at this project: linq2db/t4models. I also recommend to look at the videos here: https://github.com/linq2db/linq2db/wiki.
After having my data model generated with T4, it will look something like this:
public partial class TestDb : LinqToDB.Data.DataConnection
{
    public ITable<Directory>    Directories   { get { return this.GetTable<Directory>(); } }
    public ITable<File>         Files         { get { return this.GetTable<File>(); } }
}
[Table(Schema="dbo", Name="Directory")]
public partial class Directory
{
    [PrimaryKey, Identity] public int    ID   { get; set; } // int
    [Column,     NotNull ] public string Path { get; set; } // varchar(max)
    #region Associations
    /// <summary>
    /// FK_File_Directory_BackReference
    /// </summary>
    [Association(ThisKey="ID", OtherKey="DirectoryID", CanBeNull=true, IsBackReference=true)]
    public List<File> Files { get; set; }
    #endregion
}
[Table(Schema="dbo", Name="File")]
public partial class File
{
    [PrimaryKey, Identity] public int    ID          { get; set; } // int
    [Column,     NotNull ] public int    DirectoryID { get; set; } // int
    [Column,     NotNull ] public string Name        { get; set; } // varchar(max)
    #region Associations
    /// <summary>
    /// FK_File_Directory
    /// </summary>
    [Association(ThisKey="DirectoryID", OtherKey="ID", CanBeNull=false, KeyName="FK_File_Directory", BackReferenceName="Files")]
    public Directory Directory { get; set; }
    #endregion
}
Now there are several ways to load directories with their files. Here is a few:
[Test] // 1 query to load directories + separate queries to load files for each directory
public void Test()
{
    LinqToDB.Common.Configuration.Linq.AllowMultipleQuery = true;
    using(var db = new TestDb())
    {
        var directoriesWithFiles = db.Directories.LoadWith(d => d.Files).ToList();
    }
}
[Test] // same as above, but manually
public void Test2()
{
    using(var db = new TestDb())
    {
        var directories = db.Directories.ToList();
        foreach (var d in directories)
        {
            d.Files = db.Files.Where(f => f.DirectoryID == d.ID).ToList();
        }
    }
}
[Test] // if you want only 2 queries to the database
public void Test3()
{
    using (var db = new TestDb())
    {
        var dict = new Dictionary<int, List<File>>();
        foreach(var file in db.Files)
        {
            if(!dict.ContainsKey(file.DirectoryID))
                dict.Add(file.DirectoryID, new List<File> { file });
            else
                dict[file.DirectoryID].Add(file);
        }
        var directories = db.Directories.ToList();
        foreach (var d in directories)
        {
            List<File> files;
            d.Files = dict.TryGetValue(d.ID, out files) ? files : new List<File>();
        }
    }
}
Or you could just make a join, load everything in 1 query and then connect files to directories manually in memory. You could write your own extension method to simplify this.