There is an EF6 Code-First. There are also File and Error entities:
public partial class MyContext : DbContext { // ... public virtual DbSet<Error> Errors { get; set; } public virtual DbSet<File> Files { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { // ... modelBuilder.Entity<Error>() .HasMany(e => e.Files) .WithMany(e => e.Errors) .Map(m => m.ToTable("FileError").MapLeftKey("ErrorId").MapRightKey("FileId")); // ... } // ... } public partial class File { public File() { Errors = new HashSet<Error>(); } public int Id { get; set; } // ... public virtual ICollection<Error> Errors { get; set; } } public partial class Error { public Error() { Files = new HashSet<File>(); } public int Id { get; set; } // ... public virtual ICollection<File> Files { get; set; } } As a result, 3 tables are created in the database: Files, Errors and FileError staging table. To export to Excel, I need to have an instance of a List or DataTable. It would be nice to use Join through an intermediate table, but there is no entity for it. My problem is not understanding how to create a request to select all files with errors:
// Возвращает сущности Error. // Для доступа к свойствам File нужно перебирать // свойство Files в каждой записи. var q = from e in Errors where e.Files.Count > 0 select e; // а хотелось бы... var q = from e in Errors join f in Files in f.Errors equals e.Files select new { FileId = f.Id, ErrorId = e.Id, FilePath = f.FullPath, ErrorDescription = e.Description };