Search code examples
c#entity-frameworkselectdto

Ef core 2 diferent tables to same dto


I'm doing a select to an IQueryable, so this IQueryable can come from 2 different tables but the dto is the same. My problem is that I'm duplicating the code because of the select for each of them. Is there any way to create a general method that receives the IQueryable and inside it does the select?


Solution

  • You have an interface:

    interface INamed{
      string Name {get; set;}
    }
    

    You have two different table entities that implement it because they both have a Name property:

    public class Person : INamed {
      public string Name { get; set; }
    }
    public class Company: INamed {
      public string Name { get; set; }
    }
    

    You have a mapping method that takes anything that implements an INamed and kicks out an object with the Name set:

    SomeDto Map(INamed x){
      return new SomeDto { Name = x.Name }
    }
    

    And you call it appropriately:

    context.Persons.Select(person => Map(person) );
    
    context.Companies.Select(company => Map(company) );