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
});
ca n't Linq to Entitiesプロバイダーを使用している場合、Lambda式をデバッグします。
しかし、あなたは 見て それがどのSQLに変換されるかを知ることができます。また、パフォーマンスヒットを喜んで受ける場合は、すべてをLinqにロードしてオブジェクトをロードし、 Step by step を実行します。
この問題に関する公式のMSDNドキュメントを必ずお読みください。
visual StudioのUser Voiceページでこの提案に投票してください。
Allon Guralnek コメント2014年3月18日12:37 PMキーボードのみでブレークポイントを設定する方法について:
@匿名:ラムダ内にブレークポイントを設定することにより、今日これを行うことができます。これにより、ラムダに出入りする各値を検査できます。私の知る限り、マウスを使用してラムダ内にブレークポイントを設定することはできません。キーボードを使用する必要があります。カーソルをラムダ本体内に置き(たとえば、最初のトークン、または=>とそれに続く空白の上に)、F9(またはブレークポイントを配置するために使用するキーボードショートカット)を押します。ラムダステートメントの内部のみが赤に変わり、デバッガーはラムダが評価される各アイテムに対してそこでブレークします(したがって、100アイテムの配列の場合、.Where()を使用するとブレークポイントが100回ヒットします)。
私の現在のVisual Studio 2013で実際に動作しています。
ご覧のとおり、非常にうまく機能し、テスト対象のプロパティの値を確認できます。これは確かに素晴らしいツール/命の恩人です! :)
独自のコードにブレークポイントを追加できます。
したがって、カーソルを「x.e」に置き、F9を押します。
将来の読者のために、これは現在Visual Studioに含まれています。 Visual Studio 2015 Previewから、デバッグ中にラムダ式をデバッグできるようになりました。 Watch、QuickWatch、Immediateを含むすべてのデバッグウィンドウは、ラムダ式の評価をサポートしています。詳細については、こちらをご覧ください こちら 。
x
またはe
変数の値を表示する方法はありません。linqto ormは実行されず、SQLクエリを生成するために変換/解釈されるためです。
Visual Studioでこれを直接行う方法はわかりませんが、LinqPadをご覧ください。 http://www.linqpad.net/
ToList()を使用する場合、ラムダ式で呼び出される関数のデバッグ実行。
例
bool aFunction(int x) { return x < 10; }
var l = new List<int>() { 5, 6, 11 }.Where(el => aFunction(el)).ToList();
[ツール]、[オプション]、[デバッグ]で[コードだけを有効にする]を選択する必要がありました。 Lambdaメソッド間で異なる結果を見るために、それらの間に.ToList()を挿入しました。