LINQ ArgumentException из-за AnonymousObject - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь 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>, переданный в качестве аргумента метода.

После некоторых исследований я решил, что причиной моей ошибки было то, что WhereprojectsWithActivities стал 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, и поэтому я полностью озадачен этим.

Заранее спасибо!

1 Ответ

0 голосов
/ 05 декабря 2018

Я думаю, что проблема в OrderBy.Не могли бы вы изолировать проблему, просто запустив простую операцию OrderBy или другую операцию linq для projectsWithActivities?Что-то вроде

projectsWithActivities.OrderBy(p = > ProjectActivities.Count)

Затем добавьте другие операции одну за другой.

...