Sto facendo una semplice query con un .Select () su una vista del database e mi aspettavo di vedere un elenco più breve di colonne nell'SQL generato:
DbContext.LeadSearch.Select(ls => new
{
ls.Id,
ls.BrokerName,
ls.UpdateDate
}).Take(2).ToList();
Tuttavia, l'SQL generato includeva tutte le colonne:
SELECT TOP(@__p_0) [ls].[Id], [ls].[AssetNumber], [ls].[BrokerId],
[ls].[BrokerName], [ls].[FirstName], [ls].[IsApproved],
[ls].[LastName], [ls].[PurchaseAmount], [ls].[Yadda], [ls].[Yadda2],
... [ls].[UpdateDate] FROM [dp].[vwLeadSearch] AS [ls]
Da quello che ho letto altrove mi aspettavo che l'SQL avesse solo le colonne "Selezionate".
LeadSearch è definito come un DbSet:
public DbSet<LeadSearch> LeadSearch { get; set; }
Mappato alla vista:
modelBuilder.Entity<LeadSearch>().ToTable("vwLeadSearch").HasKey("Id");
Questo è con EF Core 2.1.1.
Una delle "colonne" che ho incluso in Select () era in realtà una proprietà calcolata sulla classe:
public string Name => FirstName + " " + LastName;
EF era abbastanza intelligente da sapere che doveva ottenere tutte le colonne per completare questa espressione. Cambiare il mio Selezionare per ottenere FirstName e LastName invece di Nome risolve il problema.