我正在尝试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
对它们进行排序,最后才尝试进行{{1 }}原来的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
进行排序,它属于空引用。
有人可以告诉我我做错了什么吗?-我仍然在学习基本的Linq,因此我完全迷上了这个问题。
谢谢!
答案 0 :(得分:0)
我认为问题出在OrderBy中。 您可以通过仅在projectsWithActivities上运行简单的OrderBy或其他linq操作来隔离问题吗?
projectsWithActivities.OrderBy(p = > ProjectActivities.Count)
然后一个接一个地添加其他操作。
答案 1 :(得分:0)
如果在Union或Concat中遇到此错误,则可能意味着子查询之一存在错误。将子查询从语句中拉出,然后在调试器中评估结果以查看错误是什么。