在匿名类型查询中选择多个列.到阵列

本文关键字:阵列 选择 类型 查询 | 更新日期: 2023-09-27 18:36:39

原谅,如果这已经在某处列出,但我显然未能在谷歌搜索中正确措辞,虽然我发现了类似的,但没有任何东西解决我需要的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.

此外,如果有人足够棒地告诉我,那么谷歌的措辞会是什么,因为谷歌搜索错误并没有让我得到任何似乎非常相关的内容。

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

Linq to SQL 选择多个列

在匿名类型查询中选择多个列.到阵列

你弄错了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);

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

要么你需要改变你的select来实际选择一个string,要么你需要删除泛型参数来ToArray,让匿名类型被推断为泛型参数。