web-dev-qa-db-fra.com

Comment déboguer une expression Linq Lambda?

J'utilise Entity Framework et Linq to Entitites.

Je voudrais savoir s'il existe un moyen dans Visual Studio 2012 de déboguer ce code étape par étape . Au moment de placer un point d'arrêt, le curseur le survole mais ne le franchit pas.

Je suis plus intéressé de voir la valeur de x.e ... pas le SQL généré par exemple.

Notes: J'utilise bien d'autres outils ou plugins Visual Studio.

          IEnumerable<EventPushNotification> eventToPushCollage = eventsForEvaluation
                    .GroupJoin(eventCustomRepository.FindAllPushedEvents(),
                        e => e.Id,
                        p => p.PushedEventId,
                        (e, p) => new { e, p })
                     .Where(x => x.e.DateTimeStart > currentDateTime &&
                        currentDateTime >= x.e.DateTimeStart.AddMinutes(defaultReminders) &&     //  Data from default reminder for collage event in web.config  
                        x.p.Count() == 0)                                           // Check if the Event has not being already pushed
                     .Select(y => new EventPushNotification
                     {
                         Id = y.e.Id,
                         EventTitle = y.e.EventTitle,
                         DateTimeStart = y.e.DateTimeStart,
                         DateTimeEnd = y.e.DateTimeEnd,
                         Location = y.e.Location,
                         Description = y.e.Description,
                         DeviceToken = y.e.DeviceToken
                     });
22
GibboK

Vous ne peut pas déboguer une expression Lambda si vous utilisez un fournisseur Linq to Entities.

Mais vous pouvez jeter un oeil sur ce que traduit SQL. De plus, si vous êtes prêt à subir un coup dur en performance - vous pouvez tout charger dans Linq pour obéir - et faire un étape par étape

8
Jens Kloster

Assurez-vous de lire le document officiel MSDN à ce sujet:

Débogage de LINQ

et votez pour cette suggestion sur la page User Voice de Visual Studio:

Déboguer les expressions Lambda

Allon Guralnek commentaires sur le 18 mars 2014 12:37 PM à propos d'un moyen de définir un point d'arrêt avec le clavier uniquement:

@Anonymous: Vous pouvez le faire aujourd'hui en définissant un point d'arrêt dans le fichier lambda, ce qui vous permet d’inspecter chaque valeur qui entre et hors du lambda. Autant que je sache, vous ne pouvez pas définir de point d'arrêt à l'intérieur un lambda en utilisant la souris, vous devez utiliser le clavier. Placez le curseur dans le corps lambda (par exemple, sur le premier jeton ou après le => et les espaces blancs qui suivent), appuyez sur F9 (ou sur le raccourci clavier que vous utilisez pour placer un point d'arrêt). Seulement l'intérieur de la déclaration lambda deviendra rouge et le débogueur y cassera Pour chaque élément, le lambda est évalué (pour un tableau de 100 éléments, utiliser .Where () fera que le point d'arrêt atteindra 100 fois).

Voici ce qui se passe dans mon Visual Studio 2013 actuel:

enter image description here

Comme vous pouvez le constater, cela fonctionne plutôt bien et nous permet de voir la valeur d’une propriété donnée testée. Ceci est à coup sûr un outil génial/épargnant de la vie! :)

73
Leniel Maccaferri

Vous pouvez ajouter des points d'arrêt sur n'importe lequel de votre propre code.

Placez donc le curseur sur 'x.e' et appuyez sur F9.

5
Maarten

Pour tous les futurs lecteurs, cela a maintenant été inclus dans Visual Studio. À partir de Visual Studio 2015 Preview, vous pouvez maintenant déboguer l'expression lambda pendant le débogage. Toutes les fenêtres de débogage, y compris Watch, QuickWatch et Immediate, prennent en charge l'évaluation de l'expression lambda. Vous pouvez en lire plus à ce sujet ici .

3
dotNET

Non, il n'y a aucun moyen de voir les valeurs des variables x et e car linq to orm n'est pas exécuté.

1
Rafal

Je ne sais pas comment procéder directement dans Visual Studio, mais vous devriez jeter un coup d'œil à LinqPad: http://www.linqpad.net/

0
studert

La fonction de débogage appelée avec l'expression lambda si vous utilisez ToList ().

Exemple

bool aFunction(int x) { return x < 10; }
var l = new List<int>() { 5, 6, 11 }.Where(el => aFunction(el)).ToList();
0
ocram88

Je devais 'activer uniquement mon code' dans Outils/Options/Débogage . Pour voir les différents résultats entre les méthodes Lambda, j'ai placé .ToList () entre elles.

0
Miguel Rodriguez