Sto cercando di Union
due IQueryables
dello stesso tipo, ma sto colpito con il seguente errore
An exception of type 'System.ArgumentException' occurred in System.Private.CoreLib.dll but was not handled in user code: 'The input sequence must have items of type 'MyProject.Data.Entities.Project', but it has items of type 'Microsoft.EntityFrameworkCore.Query.Internal.AnonymousObject'.'
Fondamentalmente mi prendo un elenco di Projects
e separare quelli che hanno Any() ProjectActivities
fuori nella propria lista - sto poi l'ordinamento per il Activity Name
prima infine di tentare di Union
originali Projects
di nuovo in.
Il mio codice era originariamente:
IQueryable<Project> projectsWithActivities = projects
.Where(x => x.ProjectActivities.Any())
projects = projectsWithActivities
.OrderBy(u => u.ProjectActivities
.OrderBy(p => p.Activity.Name)
.FirstOrDefault().Activity.Name)
.AsQueryable()
.Union(projects);
Si noti che i projects
sono un IQueryable<Project>
esistente passato come argomento del metodo.
Dopo alcune ricerche ho creduto che la causa del mio errore fosse dovuta al fatto che Where
stava facendo sì che projectsWithActivities
diventasse un oggetto AnonymousObject
e per superare questo problema dovevo Select
un nuovo oggetto Project
quindi ho cambiato il mio codice in:
IQueryable<Project> projectsWithActivities = projects
.Where(x => x.ProjectActivities.Any())
.Select(x => new Project(){Id = x.Id, SomeProperty = x.SomeProperty,
etc etc});
Tuttavia, ciò non ha fatto alcuna differenza, devo ancora affrontare l'errore sopra riportato.
Inoltre, se ti stai chiedendo perché sto separando un elenco di Projects
e quindi sto cercando di ricollegarli, è perché alcuni Projects
non hanno ProjectActivities
e quindi ogni volta che tento di ordinare in base al Activity Name
cade su un riferimento null .
Qualcuno potrebbe far luce su ciò che sto facendo di sbagliato - sto ancora imparando moltissimo Linq di base e quindi sono completamente sconcertato su questo.
Grazie in anticipo!
Se si verifica questo errore in un'Unione o in un Concat, probabilmente significa che c'è un errore con una delle sottoquery. Estrarre la subquery dall'istruzione e valutare i risultati nel debugger per vedere qual è l'errore.