Select AnonymousType 中的多个列 query.ToArray?

Select multiple columns in AnonymousType query.ToArray?

请原谅,如果这已经在某处列出,但我显然没有在 Google 搜索中正确地表达它,虽然我发现了类似的内容,但没有解决 ToArray 部分我需要(这是我遇到问题的地方)...

给定以下代码:

return Json(string.Join(",", (from EducationCourse in db.Courses 
    join EventsPackageCourse in db.PackageCourses on EducationCourse.CourseID equals EventsPackageCourse.CourseID
    join EventsPackage in db.Packages on EventsPackageCourse.PackageID equals EventsPackage.PackageID
    where EventsPackage.EventID == eventID
    select EducationCourse.Name).ToArray<string>()),
JsonRequestBehavior.AllowGet);

方法的返回类型是JsonResult

如何在将 转换为数组时为多列修改 select 类似于以下 :

...(etc)...
select ( new { EducationCourse.Name, EvenetsPacakgeCourse.StartDate, EventsPacakageCourse.EndDate})).ToArray<string()),
....

正如我所写的(如上所述),它会产生一个错误: 'System.Linq.IQueryable<AnonymousType#1>' does not contain a definition for 'ToArray' and the best extension method overload 'System.Linq.ParallelEnumerable.ToArray<TSource>(System.Linq.ParallelQuery<TSource>)' has some invalid arguments.

另外,如果有人能告诉我,什么是合适的 google 措辞因为谷歌搜索错误并没有让我得到任何看起来非常相关。

编辑:现在我已经实际提交了问题,SO 向我展示了一个边栏 link,它解释了正在发生的事情和原因,并解决了 Luizgrs 和 Servvy 的评论:

Linq to SQL select multiple columns

您有一个匿名类型序列,而不是一个字符串序列,因此您不能将 string 指定为 ToArray 的泛型参数。

要么您需要将 select 更改为实际 select 出一个 string,或者您需要删除 ToArray 的通用参数并让匿名类型被推断为通用参数。

您误用了 Controller.Json 方法。

它已经序列化了您作为参数传递的对象,因此您无需将其转换为字符串。

只需这样做:

return Json((from EducationCourse in db.Courses 
    join EventsPackageCourse in db.PackageCourses on EducationCourse.CourseID equals EventsPackageCourse.CourseID
    join EventsPackage in db.Packages on EventsPackageCourse.PackageID equals EventsPackage.PackageID
    where EventsPackage.EventID == eventID
    select new { EducationCourse.Name, EvenetsPacakgeCourse.StartDate, EventsPacakageCourse.EndDate}),
JsonRequestBehavior.AllowGet);