Я пытаюсь Union
два IQueryables
того же типа, но у меня появляется следующая ошибка
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'.'
В основном я беру список Projects
и выделение тех, у кого Any() ProjectActivities
, в их собственный список - я затем сортирую их по Activity Name
, прежде чем, наконец, попытаться Union
исходный Projects
вернуться обратно.
Мой код был первоначально:
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);
Обратите внимание, что projects
- это существующий IQueryable<Project>
, переданный в качестве аргумента метода.
После некоторых исследований я решил, что причиной моей ошибки было то, что Where
projectsWithActivities
стал AnonymousObject
, и для преодоления этой проблемы мне пришлось Select
создать новый Project
объект, поэтому я изменил свой код на:
IQueryable<Project> projectsWithActivities = projects
.Where(x => x.ProjectActivities.Any())
.Select(x => new Project(){Id = x.Id, SomeProperty = x.SomeProperty,
etc etc});
Однако это не сделалоРазница, я все еще сталкиваюсь с вышеуказанной ошибкой.
Также, если вам интересно, почему я разделяю список из Projects
, а затем пытаюсь объединить их обратно, это потому, что некоторые Projects
не делаютиметь любой ProjectActivities
и, следовательно, всякий раз, когда я пытаюсь отсортировать по Activity Name
, этоНа нулевой ссылке.
Может, кто-нибудь пролил немного света на то, что я делаю неправильно - я все еще очень много изучаю базовый язык Linq, и поэтому я полностью озадачен этим.
Заранее спасибо!