在匿名类型查询中选择多个列.到阵列
本文关键字:阵列 选择 类型 查询 | 更新日期: 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
,让匿名类型被推断为泛型参数。