繁体   English   中英

无法将 lambda 表达式转换为类型“对象”

[英]Cannot convert lambda expression to type 'object'

如何让这个 Lambda 表达式在 Entity Framework 中工作?

基本上,如果有goalCyleId ,则查找它并获取它的结束日期。

.Select(x => new GoalDTO()
{
    GoalId = x.GoalId,
    Name = x.Name,
    DueDate = x.GoalCycleId == null ? null : _context.GoalCycles.Find(y => y.GoalCycleId == x.GoalCycleId).EndDate
})

我收到一个错误

无法将 lambda 表达式转换为类型“object”,因为它不是委托类型

尝试使用以下查询,

.Select(x => new GoalDTO() {
  GoalId = x.GoalId,
    Name = x.Name,
    DueDate = x.GoalCycleId == null ? null : _context.GoalCycles.FirstOrDefault(y => y.GoalCycleId == x.GoalCycleId).EndDate

})

如果你的实体设置了导航属性,你应该只需要像这样的东西:

.Select(x => new GoalDTO()
{
    GoalId = x.GoalId,
    Name = x.Name,
    DueDate = x.GoalCycle.EndDate
})

目标上的 GoalCycleId 可能可以为空,因此 GoalCycle 导航引用可能为 #null,但是当 EF 向下投影时,如果该目标没有 GoalCycle,它将保留 DueDate #null,否则采用结束日期。 但是,如果Select在实体化 EF 查询之后执行,那将引发NullReferenceException (即过早ToList()

它不应该抱怨:

DueDate = x.GoalCycle?.EndDate

DbSet class 的Find方法需要一个主键值作为其参数,但您向它传递了一个 lambda 表达式。 请改用FirstOrDefault _context.GoalCycles.FirstOrDefault(y => y.GoalCycleId == x.GoalCycleId).EndDate

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM