![](/img/trans.png)
[英]cannot convert lambda expression to type object because it is not a delegate type
[英]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.