web-dev-qa-db-ja.com

Linq Lambda式をデバッグする方法は?

Entity FrameworkとLinq to Entititesを使用しています。

Visual Studio 2012にこのコードを段階的にデバッグする方法があるかどうかを知りたいです。ブレークポイントを配置する瞬間、カーソルはブレークポイントの上に移動しますが、中には入りません。

たとえば、生成されたsqlではなく、x.eの値を確認することに興味があります。

注:他のツールや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
                     });
25
GibboK

ca n't Linq to Entitiesプロバイダーを使用している場合、Lambda式をデバッグします。

しかし、あなたは 見て それがどのSQLに変換されるかを知ることができます。また、パフォーマンスヒットを喜んで受ける場合は、すべてをLinqにロードしてオブジェクトをロードし、 Step by step を実行します。

8
Jens Kloster

この問題に関する公式のMSDNドキュメントを必ずお読みください。

LINQのデバッグ

visual StudioのUser Voiceページでこの提案に投票してください。

ラムダ式のデバッグ

Allon Guralnek コメント2014年3月18日12:37 PMキーボードのみでブレークポイントを設定する方法について:

@匿名:ラムダ内にブレークポイントを設定することにより、今日これを行うことができます。これにより、ラムダに出入りする各値を検査できます。私の知る限り、マウスを使用してラムダ内にブレークポイントを設定することはできません。キーボードを使用する必要があります。カーソルをラムダ本体内に置き(たとえば、最初のトークン、または=>とそれに続く空白の上に)、F9(またはブレークポイントを配置するために使用するキーボードショートカット)を押します。ラムダステートメントの内部のみが赤に変わり、デバッガーはラムダが評価される各アイテムに対してそこでブレークします(したがって、100アイテムの配列の場合、.Where()を使用するとブレークポイントが100回ヒットします)。

私の現在のVisual Studio 2013で実際に動作しています。

enter image description here

ご覧のとおり、非常にうまく機能し、テスト対象のプロパティの値を確認できます。これは確かに素晴らしいツール/命の恩人です! :)

79

独自のコードにブレークポイントを追加できます。

したがって、カーソルを「x.e」に置き、F9を押します。

6
Maarten

将来の読者のために、これは現在Visual Studioに含まれています。 Visual Studio 2015 Previewから、デバッグ中にラムダ式をデバッグできるようになりました。 Watch、QuickWatch、Immediateを含むすべてのデバッグウィンドウは、ラムダ式の評価をサポートしています。詳細については、こちらをご覧ください こちら

3
dotNET

xまたはe変数の値を表示する方法はありません。linqto ormは実行されず、SQLクエリを生成するために変換/解釈されるためです。

1
Rafal

Visual Studioでこれを直接行う方法はわかりませんが、LinqPadをご覧ください。 http://www.linqpad.net/

0
studert

ToList()を使用する場合、ラムダ式で呼び出される関数のデバッグ実行。

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

[ツール]、[オプション]、[デバッグ]で[コードだけを有効にする]を選択する必要がありました。 Lambdaメソッド間で異なる結果を見るために、それらの間に.ToList()を挿入しました。

0