在AnonymousType query.ToArray中选择多个列?

时间:2015-01-06 17:12:27

标签: c# json linq entity-framework

请原谅,如果已在某处列出,但我显然未能在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

如何修改多列的选择,类似于以下,同时将其转换为数组

...(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.

此外,如果有人会非常棒地告诉我,那么谷歌的措辞是什么,因为谷歌搜索错误并不能让我得到任何看似非常相关的信息。

编辑:现在我已经提交了这个问题了,所以我正在向我展示一个侧边栏链接,它解释了Luizgrs和Servvy的注意事项以及原因和解决方案:

Linq to SQL select multiple columns

2 个答案:

答案 0 :(得分:1)

您有一系列匿名类型,而不是一系列字符串,因此您无法将string指定为ToArray的通用参数。

您需要更改select以实际选择string,或者您需要删除ToArray的泛型参数并将匿名类型推断为通用参数

答案 1 :(得分:1)

你误导了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);