gpt4 book ai didi

c# - LINQ:无法将类型 'System.Int32' 转换为类型 'System.Object'

转载 作者:行者123 更新时间:2023-11-30 20:47:31 25 4
gpt4 key购买 nike

我是 MVC、EF 和 LINQ 的新手。

我首先使用 EF 和 DB 从数据库创建所有模型。我还创建了一个 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; }
}

在我的类(class) Controller 中,我尝试使用以下查询(在 linqpad 中有效但在 mvc 中无效)从 Viewmodel 获取模型,并且我还使用 ViewData 访问存储库(这很好用):

// 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 在运行时进行编译,因此我可以毫无错误地编译项目。但是当访问类(class)/详细信息 View 时,出现以下错误:无法将类型“System.Int32”转换为类型“System.Object”。 LINQ to Entities 仅支持转换 EDM 原语或枚举类型。

在以下字段上创建 CourseDetailsVM 的新实例时发生错误:CourseEventDateTimeFrom、CourseEventDateTimeTo、CourseEventDurationInDays

我尝试使用硬编码值填充上述属性,但效果很好。所以我知道,错误发生在哪里,但我不知道为什么以及如何解决它。

应 Yuliam Chandra 的要求,CourseEventDate 类的内容(由 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; }
}

我希望你们中的一些人能帮助我。

谢谢,

浪人

最佳答案

比较CourseEventFk时可能会出现错误( int? ) 和 CourseEventId ( int ) 使用 Equals它的参数接受对象类型,这是一个 CLR 方法。 LINQ to Entities 不支持 CLR 方法。

尝试使用==运算符,在以下代码中与 L2S 有点兼容。

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

关于c# - LINQ:无法将类型 'System.Int32' 转换为类型 'System.Object',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25745922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com