Выражение не может содержать лямбда-выражения
Я извлек объект List<>
, как показано ниже (с помощью .Include()
):
List<vDetail> entityvDetails =
context.vDetails
.Include("payInstallment.appsDetail")
.Include("payInstallment.appsDetail.application")
.Include("payInstallment.appsDetail.purposes")
.Where(e => e.vch_id == 123).ToList();
И затем где-то в коде вперед я попытался отфильтровать запись сущности, как показано ниже:
foreach (vDetail item in lstVDetails)
{
...
int purposeId = entityvDetails.Where(e => e.sad_id == item.sad_id).FirstOrDefault().payInstallment.appsDetail.purposes.prp_id;
...
}
Копирование компиляции совершенное. Однако время выполнения, возвращающее следующую ошибку (хотя все навигаторы включены):
Object reference not set to an instance of an object.
Итак, я настроил для отладки использование окна часов. Теперь, анализируя приведенный ниже оператор в окне просмотра:
entityVoucherDetails.Where(e => e.sad_id == item.sad_id).FirstOrDefault()
окно сгенерированное после ошибки:
Выражение не может содержать лямбда-выражения.
Пожалуйста, если кто-нибудь может сказать мне, что может быть причиной?
Ответы
Ответ 1
Оценка лямбда-выражений в отладчике (окно просмотра) еще не поддерживается.
Для этого существует открытый запрос функции.
Для отладки вашей проблемы вы должны назначить результат выражения лямбда выделенной переменной и использовать ее в следующих операциях.
var entity = entityvDetails.Where(e => e.sad_id == item.sad_id).FirstOrDefault();
Обновление 08/2014:
Microsoft опубликовала обновление по запросу функции, объявив, что они начали работать над ней:
Итак, где мы стоим.
- 1) Мы хотим, чтобы это работало так же, как и вы. Его не рассматривают - его ход.
- 2) Мы выяснили, как заставить его работать; он просто требует переписывать все.
- 3) Переписывали все.
- 4) Переписывание всего требует много времени и много тестирования.
Обновление 11/2014:
Microsoft, наконец, внедрила его с некоторыми ограничениями в VS2015. Читайте здесь.
Ответ 2
Если вам все еще нужно использовать Visual Studio 2010 или 2013, вы можете использовать лямбда-выражения в консоли диспетчера пакетов. Для получения дополнительной информации см. Мой SO сообщение здесь:
Почему невозможно оценить lambdas в ближайшем окне?
Это исходный источник