2013-09-04 12 views
7

Czy istnieje sposób, aby wyświetlić wynik kwerendy LINQ w Visual Studio 2010? Jeśli dodasz zapytanie jako wyrażenie zegarka, powie "Wyrażenie nie może zawierać wyrażeń lambda".Wyświetl wynik kwerendy LINQ w zegarku/debugerze

W jakimś kodzie testowym agreguję sumy kilku pomiarów dla pewnej liczby dzieci i porównuję sumę do ich wartości rodziców dla tej samej metryki (zagnieżdżone głęboko, jeśli nie). Wszystkie moje zapytania znajdują się w instrukcjach if. Jak mogę wyświetlić te wartości, nie tylko przypisując wynik do zmiennej lokalnej? Przypisanie podwaja moją liczbę linii i oprócz debugowania nie zapewnia żadnych korzyści. Czy ktoś ma pracę wokół, której używają do przeglądania wyników zapytań LINQ w debugerze?

+0

Możesz używać [LINQPad] (http://www.linqpad.net/) i odwoływać się do własnych złożeń. Możesz "Zrzucić" zapytanie, a zobaczysz wyniki. – Habib

+0

@AlexeiLevenkov są to liczby całkowite. – evanmcdonnal

+0

@Habib Wziąłbym pod uwagę testowanie mojego kodu w LINQPad, ale to brzmi jak piekło dużo pracy. W tym momencie najlepszym rozwiązaniem jest przyciąganie uwagi do wartości i robienie odrobiny psychicznej matematyki. – evanmcdonnal

Odpowiedz

7

Obecnie nie można używać wyrażeń lambda na liście obserwowanych w programie Visual Studio.

Istnieje kilka rzeczy, które możesz zrobić:

  1. utworzyć metodę, która wywołuje pożądany lambda, a następnie umieścić ten sposób połączenia w wyciągu zegarka.

  2. Ustaw żądane wyrażenie lambda na zmienną, a następnie spójrz na zawartość tej zmiennej o wartości . Należy pamiętać, że spowoduje to wyliczenie poprzez wyrażenie i może powodować działania niepożądane.

Wyobrażam sobie ten znajduje się na liście wniosków cecha dla VS, ale MSFT nie uczyniła go jeszcze. Mam nadzieję, że to pomoże w międzyczasie.

+0

+1 chociaż już wiedziałem o tych pracach wokół i żadne z nich nie jest atrakcyjne. – evanmcdonnal

+0

@evanmcdonnal uzgodnione. Nie lubię zmieniać kodu, aby spełnić moje potrzeby związane z debugowaniem. – Codeman

+0

W tym momencie mogę równie dobrze wstawiać instrukcje drukowania i debugować jak przedtem, zanim wiedziałem, jak używać debuggera: - & ( – evanmcdonnal

2

Nie jestem pewien, czy to właśnie masz na myśli (może się nieporozumienie), ale mogę zobaczyć wyniki mojego zapytania LINQ, patrząc w oknie Locals i rozszerzając widok wyników mojej zmiennej zapytania. enter image description here

ciągu, że mogę kiedykolwiek dalej rozwinąć i wyświetlić dane wewnątrz: enter image description here

+0

Przydzieliłeś zmienna lokalna Mój kod wygląda tak: 'if (parent.Invites == children.Select (x => x.Invites) .Aggregate ((c, n) => c + n))'. Szukałem sposób, aby uniknąć dodawania tego niepotrzebnego zadania wszędzie, aby móc sprawdzić wartość zwracaną przez to zapytanie w debugerze – evanmcdonnal

+0

Ah, ale mój punkt przerwania jest przed przypisaniem zmiennej lokalnej Nigdy nie osiągam tej części, z punktem przerwania, gdzie jest – Kevin

+1

Doh! Zignoruj ​​to, co powiedziałem Nie myślałem, że wynik jest przypisany do lokalnej zmiennej "zapytanie" Podwójne, przepraszam, kolego! – Kevin

5

In Visual Studio 2015 you'll be able to debug lambda expressions (to Podgląd w momencie pisania). Będziesz mógł dodawać zegarki z wyrażeniami lambda itp.

Ewaluator wyrażeń musiał zostać przepisany, brakuje wielu funkcji: zdalne debugowanie ASP.NET, zadeklarowanie zmiennych w oknie bezpośrednim, kontrola zmiennych dynamicznych itp. Wyrażenia lambda które wymagają wywoływania funkcji natywnych nie są obecnie obsługiwane. Wszystkie funkcje zostaną zakończone po zwolnieniu VS2015.

+0

To jest świetne! Miałem VS 2015 przez około 4 miesiące i od korzystania ze starszych wersji VS, zawsze myślałem, że zapytania LINQ nie były dozwolone w oknie zegarka. –

5

Wybieram ten stary wątek dla tych, którzy nie mają tyle szczęścia, aby używać VS 2015, a którzy wciąż cierpią z powodu tej brakującej funkcji w poprzedniej wersji VS.

To jest trochę bolesne, że trzeba podzielić kod tylko ze względu na debugowanie.

Alternatywą lubię używać do Gdzie zapytania jest: DynamicQueryable.

powiedzmy masz zapytanie: (znowu

System.Linq.Dynamic.DynamicQueryable.Where(myClass.Records.AsQueryable(), "Country.Code == \"FRA\"").ToList() 

Jest to dość łatwe do napisania dla przypadku zapytań:

myClass.Records.Where(rec => rec.Country.Code == "FRA") 

Następnie za pomocą DynamicQueryable można wpisać oświadczenie zegarek, który będzie wyglądać), a ponieważ jest to zegarek, dość szybki do aktualizacji i przydatny do celów debugowania. Pomyśl o dodaniu ToList() lub ToArray(), aby automatycznie zastosować projekcję w wyciągu z zegarka.

Dla złożonych instrukcji Select, myślę, że nie byłby przydatny, ale może pomóc.

Polecam również użyć narzędzia o nazwie OzCode. Ostatnia wersja zawiera LINQ debug feature which is quite awesome. Możesz śledzić stan modyfikującej kolekcję na każdym poziomie instrukcji LINQ.

Powiązane problemy