Как я могу заставить это лямбда-выражение работать в 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
})
я получаю сообщение об ошибке
Невозможно преобразовать лямбда-выражение в тип «объект», поскольку это не тип делегата.
Похоже, вам лучше присоединиться к присоединиться ?





Попробуйте использовать приведенный ниже запрос,
.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 для цели может иметь значение Null, поэтому ссылка навигации GoalCycle может быть #null, но когда EF проецирует это вниз, он оставит DueDate #null, если для этой цели нет GoalCycle, в противном случае будет использоваться дата окончания. Однако это приведет к срабатыванию NullReferenceException, если Select выполняется после материализации запроса EF. (то есть преждевременно ToList())
Он не должен жаловаться на:
DueDate = x.GoalCycle?.EndDate
Find Метод класса DbSet ожидает в качестве параметра значение первичного ключа, но вы передаете ему лямбда-выражение. Вместо этого используйте FirstOrDefault ._context.GoalCycles.FirstOrDefault(y => y.GoalCycleId == x.GoalCycleId).EndDate
используя System.Data.Entity; У вас есть эта ссылка?