32

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

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

たとえば、生成されたSQLではなく、xeの値を見ることにもっと興味があります。

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

8 に答える 8

88

この件については、MSDN の公式ドキュメントを必ずお読みください。

LINQ のデバッグ

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

Lambda 式をデバッグする

Allon Guralnekは、キーボードのみでブレークポイントを設定する方法について、2014 年 3 月 18 日午後 12:37に次のようにコメントしています。

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

私の現在のVisual Studio 2013での動作は次のとおりです。

ここに画像の説明を入力

ご覧のとおり、非常にうまく機能し、テストされている特定のプロパティの値を確認できます。これは確かに素晴らしいツール/ライフセーバーです! :)

于 2014-03-19T21:46:45.977 に答える
10

Linq to Entities プロバイダーを使用している場合、Lambda 式をデバッグすることはできません。

しかし、それがどの SQL に変換されるかを見ることができます。また、パフォーマンス ヒットを許容する場合は、オブジェクトをすべて Linq にロードして、ステップ バイ ステップを実行できます。

于 2013-06-21T08:54:07.457 に答える
8

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

カーソルを 'xe' に置き、F9 を押します。

于 2013-06-21T08:52:44.347 に答える
3

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

于 2014-11-13T04:46:01.713 に答える
1

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

于 2013-06-21T08:53:46.017 に答える
0

ツール/オプション/デバッグで「マイコードのみを有効にする」必要がありました。Lambda メソッド間の異なる結果を確認するために、それらの間に .ToList() を配置しました。

于 2016-01-10T17:40:20.553 に答える
-1

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

于 2013-06-21T08:51:41.030 に答える