Linq Lambda Expression дегенді қалай түзету керек?

Мен Entity Framework және Linq-ді Entitites-ге қолданамын.

Visual Studio 2012 бағдарламасында осы кодты қадамдастыру үшін қандай да бір жол бар ма екенін білгім келеді. Кездейсоқ нүкте қойылған сәтте курсор оған өтеді, бірақ ішіне кірмейді.

Маған мысал келтірілген sql емес, x.e мәнін көру қызықтырады.

Ескертулер: Мен басқа құралдарды немесе Visual Studio плагиндерді пайдалану арқылы жақсымын.

          IEnumerable 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
                     });
19
Сіз ламбдалардың біреуін тінтуірдің оң жағымен басып, «Breakpoint -> Break Breakpoint» тармағын таңдаңыз. Бұл ламбданы ғана көрсетеді.
қосылды автор Adam Houldsworth, көзі
blogs.msdn.com/b/visualstudioalm/archive/2014/11/12/… VS-2015 мұны қолдайды. :)
қосылды автор pedram, көзі

7 жауаптар

Осы мәселе бойынша ресми MSDN документін оқып шыққаныңызға көз жеткізіңіз:

LINQ түзету

және Visual Studio пайдаланушы дауыстық бетінде осы ұсыныс үшін дауыс беріңіз:

Lambda өрнектерін түзету

Allon Guralnek comments on March 18, 2014 12:37 PM about a way of setting a breakpoint with the keyboard only:

@Anonymous: You can do this today by setting a breakpoint inside the lambda, thereby enabling you to inspect each value that comes in and out of the lambda. As far as I know, you can't set a breakpoint inside a lambda using the mouse, you must use the keyboard. Put the cursor inside the lambda body (e.g. on the first token, or anything after the => and the whitespace that follows) then press F9 (or whatever keyboard shortcut you use to place a breakpoint). Only the inside of the lambda statement will turn red, and the debugger will break there for each item the lambda is evaluated against (so for an array of 100 items, using .Where() will cause the breakpoint to hit 100 times).

Міне, менің ағымдағы Visual Studio 2013 жұмысында:

enter image description here

Көріп отырғаныңыздай, бұл өте жақсы жұмыс істейді және тексерілетін объектінің мәнін көруге мүмкіндік береді. Бұл керемет құрал/өмірді қорғаушы! :)

70
қосылды
Бұл сондай-ақ Visual Studio 2017 бағдарламасында жұмыс істемейді
қосылды автор James Wierzba, көзі
Бұл жауап емес пе?
қосылды автор JsonStatham, көзі
Бұл редакторда жақсы көрінеді (VS2013) (тек қана лямбда қызыл), бірақ отладка күйде болғанда, барлық мәлімдеме мен үшін қызыл болады, ал отладчик сыртқы нұсқауда үзіледі. :( Идеялар?
қосылды автор Macke, көзі
Бұл Visual Studio 2015 бағдарламасында жұмыс істемейді?
қосылды автор Rosdi Kasim, көзі
Салқын, сіздің ұштық маған әртүрлі ламбда өрнектері арқылы түзетуге көмектесті, олар маған толығымен қара жәшік болды. Рахмет
қосылды автор Robert Dinaro, көзі

мүмкін емес debug егер Linq-ге Entities провайдерін пайдалансаңыз, Lambda өрнегі.

But you can

take a look at what SQL it translate into. Also if you are willing to suffer a performance hit - you could load it all into Linq to obejcts - and do a Step by step

6
қосылды
@JensKloster Назар аударыңыз, бұл мәлімдеме енді дұрыс емес - мен OzCode деп аталатын VS-ге коммерциялық кеңейтімде жұмыс істеймін. Біз LINQ Debugging in v3.0 және қолдау
қосылды автор Omer Raviv, көзі
@Daved hmmm Leniel дұрыс болар еді if OP LinqToObjects қолданған - бірақ бұл ОР жағдайында емес. Оп ламбда - LinqToEntities және бір cant Leiel ұсынатындарды деблеу. Мен өзімнің жауапымды ашық айттым
қосылды автор Jens Kloster, көзі
қосылды автор Daved, көзі
Әбден жеткілікті. Мен осы бөлімді дұрыс оқимын. Сіздің шешіміңізді де түзеткеніңіз үшін рахмет. Linq to Obj төменде қараңыз. Linq to Entity жоғарыда қараңыз :)
қосылды автор Daved, көзі

Сіз өзіңіздің кодыңыздың кез келгеніне тоқтау нүктелерін қоса аласыз.

Сондықтан курсорды 'x.e' -ге қойып, F9 пернесін басыңыз.

5
қосылды

Кез-келген болашақ оқырмандар үшін бұл енді Visual Studio бағдарламасына қосылған. Visual Studio 2015 Preview-тен бастап, енді отладтану кезінде lambda өрнегін деблокировать аласыз. Watch, QuickWatch және Immediate қоса алғанда, барлық отладки терезелері lambda экспрессиясын бағалауды қолдайды. Бұл туралы толығырақ білуге ​​болады мұнда .

3
қосылды

x немесе e мәндерінің мәндерін көруге ешқандай мүмкіндік жоқ, себебі linq немесе orm орындалмаса, ол SQL сұрауын жасау үшін аударылады/түсіндіріледі.

1
қосылды

I don't know how to this directly in Visual Studio, but you should have a look at LinqPad: http://www.linqpad.net/

0
қосылды

Мен Tools/Options/Debugging ішіндегі 'Тек менің кодын қосу' керек болды. Lambda-әдістері арасындағы әртүрлі нәтижелерді көру үшін, мен оларды қойдым.

0
қосылды
Менде VS 2015 корпоративтік басылымы бар, бұл параметрді жасады, бірақ әлі жұмыс істемейді
қосылды автор Adeem, көзі