LINQ:无法转换类型'System.Int32'输入'System.Object的“

编程入门 行业动态 更新时间:2024-10-28 12:25:41
本文介绍了LINQ:无法转换类型'System.Int32'输入'System.Object的“的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我是新来的MVC和EF和LINQ。

I'm new to MVC and EF and LINQ.

我用EF和DB首先创建所有从数据库模型。我还创建了一个视图模型CourseDetailsVM:

I used EF and DB first to create all the models from the DB. I also created a ViewModel "CourseDetailsVM":

public class CourseDetailsVM { public int CourseId { get; set; } public int CategoryFk { get; set; } public int SoftwareFk { get; set; } public int TeacherFk { get; set; } public string CourseCode { get; set; } public string CourseCodeMs { get; set; } public string CourseName { get; set; } public string CourseDescriptionShort { get; set; } public int CourseEventId { get; set; } public int? CourseEventDurationInDays { get; set; } public int? CourseEventPrice { get; set; } public int CourseEventDateId { get; set; } public DateTime? CourseEventDateTimeFrom { get; set; } public DateTime? CourseEventDateTimeTo { get; set; } }

在我的课程控制器我尝试使用摆脱视图模型模型下面的查询(在linqpad,但不是在MVC工作),我也使用的ViewData来访问存储库(这工作正常):

In my Course Controller I try to get the Model from the Viewmodel using the following query (which works in linqpad but not in mvc) and I also use ViewData to access the repository (this works fine):

// GET: /Course/Details/5 public ActionResult Details(int id) { // get courses to display course details using ViewData ViewData["Courses"] = _repository.GetCourses(id); // get course events var result = (from c in db.Courses join ce in db.CourseEvents on c.CourseId equals ce.CourseFk join ced in db.CourseEventDates on ce.CourseEventId equals ced.CourseEventFk group ce by new { ce.CourseEventId, c.CourseId, c.CourseCode, c.CourseName, ce.CourseEventPrice } into grp select new CourseDetailsVM { CourseEventId = grp.Key.CourseEventId, CourseId = grp.Key.CourseId, CourseCode = grp.Key.CourseCode, CourseEventDateTimeFrom = (from c2 in db.CourseEventDates where (c2.CourseEventFk.Equals(grp.Key.CourseEventId)) select c2.CourseEventDateTimeFrom).Min(), CourseEventDateTimeTo = (from c2 in db.CourseEventDates where (c2.CourseEventFk.Equals(grp.Key.CourseEventId)) select c2.CourseEventDateTimeFrom).Max(), CourseEventDurationInDays = (from c2 in db.CourseEventDates where (c2.CourseEventFk.Equals(grp.Key.CourseEventId)) select c2.CourseEventDateTimeFrom).Count() / 2, CourseName = grp.Key.CourseName, CourseEventPrice = grp.Key.CourseEventPrice, CourseEventDateId = grp.Key.CourseEventId }).OrderBy(c => c.CourseEventDateTimeFrom); return View("Details", result); }

由于LINQ的运行上编译,我可以编译该项目没有任何错误。但访问课程时/详细查看我得到以下错误: 无法投类型'System.Int32'输入'System.Object的。 LINQ到实体仅支持铸造EDM基元或枚举类型

在以下领域作出CourseDetailsVM的一个新的实例时出现的错误: CourseEventDateTimeFrom,CourseEventDateTimeTo,CourseEventDurationInDays

The error occurs when making an new instance of CourseDetailsVM on the following fields: CourseEventDateTimeFrom, CourseEventDateTimeTo, CourseEventDurationInDays

我试图填补使用硬编码值所提到的属性和它工作得很好。所以我知道,那里的错误发生,但我不知道为什么,以及如何解决它。

I tried fill the mentioned properties using hard coded values and it worked fine. So I know, where the error occurs, but I don't know why and how to solve it.

由于所要求的Yuliam钱德拉的CourseEventDate类的内容(由EF生成):

As requested by Yuliam Chandra, the content of the CourseEventDate class (generated by EF):

public partial class CourseEventDate { public int CourseEventDateId { get; set; } public Nullable<int> CourseEventFk { get; set; } public Nullable<System.DateTime> CourseEventDateTimeFrom { get; set; } public Nullable<System.DateTime> CourseEventDateTimeTo { get; set; } public virtual CourseEvent CourseEvent { get; set; } }

我希望某人你们能帮助我。

I hope that sb of you guys can help me.

感谢您,

罗宁

推荐答案

比较时可能造成的误差 CourseEventFk ( INT?)和 CourseEventId ( INT )使用等于,其中的参数接受的对象类型,它是一个CLR方法。 LINQ到实体不支持CLR的方法。

The error could be caused when comparing CourseEventFk (int?) and CourseEventId (int) using Equals where its parameter accepts object type which is a CLR method. LINQ to Entities doesn't support CLR method.

尝试使用 == 运营商,这多少有点L2S兼容,在下面的代码。

Try to use == operator, which somewhat compatible to L2S, on following code.

CourseEventDateTimeFrom = ..where (c2.CourseEventFk == grp.Key.CourseEventId).. CourseEventDateTimeTo = ..where (c2.CourseEventFk == grp.Key.CourseEventId).. CourseEventDurationInDays = ..where (c2.CourseEventFk == grp.Key.CourseEventId)..

更多推荐

LINQ:无法转换类型'System.Int32'输入'System.Object的“

本文发布于:2023-05-31 12:01:23,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/391359.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:类型   LINQ   Object   System

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!