簡體   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