web-dev-qa-db-fra.com

L'expression ne peut pas contenir d'expressions lambda

J'ai récupéré l'objet List<> Comme ci-dessous (avec .Include()):

List<vDetail> entityvDetails =
    context.vDetails
    .Include("payInstallment.appsDetail")
    .Include("payInstallment.appsDetail.application")
    .Include("payInstallment.appsDetail.purposes")
    .Where(e => e.vch_id == 123).ToList();

Et puis quelque part dans le code à venir, j'ai essayé de filtrer l'enregistrement d'entité comme ci-dessous:

foreach (vDetail item in lstVDetails)
{
    ... 

    int purposeId = entityvDetails.Where(e => e.sad_id == item.sad_id).FirstOrDefault().payInstallment.appsDetail.purposes.prp_id;

    ...
}

Compilation de code parfaite. Cependant, le runtime renvoyant l'erreur suivante (bien que toutes les navigations soient incluses):

Object reference not set to an instance of an object.

J'ai donc mis au débogage à l'aide de la fenêtre de surveillance. Maintenant, tout en analysant la déclaration ci-dessous dans la fenêtre de surveillance:

entityVoucherDetails.Where(e => e.sad_id == item.sad_id).FirstOrDefault()

la fenêtre de surveillance a généré l'erreur suivante:

L'expression ne peut pas contenir d'expressions lambda.

S'il vous plaît, si quelqu'un peut me dire quelle pourrait être la raison?

32
Khadim Ali

L'évaluation des expressions Lambda dans le débogueur (fenêtre de surveillance) n'est pas encore prise en charge.

Il y a une demande de fonctionnalité ouverte pour cela.

Pour déboguer votre problème, vous devez affecter le résultat de l'expression lambda à une variable dédiée et l'utiliser dans les instructions suivantes.

var entity = entityvDetails.Where(e => e.sad_id == item.sad_id).FirstOrDefault();

Mise à jour 08/2014: Microsoft a publié une mise à jour sur la demande de fonctionnalité annonçant qu'ils ont commencé à y travailler:

Voici donc où nous en sommes.

  • 1) Nous voulons que cela fonctionne autant que vous. Ce n'est pas en cours d'examen - il est en cours.
  • 2) Nous avons trouvé comment le faire fonctionner; cela nécessite simplement de réécrire tout .
  • 3) Nous réécrivons tout.
  • 4) Tout réécrire prend beaucoup de temps et de tests.

Mise à jour 11/2014: Microsoft l'a finalement implémenté avec quelques limitations dans VS2015. Lisez ici.

57
BlueM

Si vous devez toujours utiliser Visual Studio 2010 ou 2013, vous pouvez utiliser des expressions lambda dans la console du gestionnaire de packages. Pour plus de détails, veuillez consulter mon SO poste ici:

Pourquoi n'est-il pas possible d'évaluer les lambdas dans la fenêtre immédiate?

Ceci est le source d'origine

2
user8128167