web-dev-qa-db-ja.com

式にラムダ式を含めることはできません

以下のように_List<>_オブジェクトを取得しました(.Include()を使用):

_List<vDetail> entityvDetails =
    context.vDetails
    .Include("payInstallment.appsDetail")
    .Include("payInstallment.appsDetail.application")
    .Include("payInstallment.appsDetail.purposes")
    .Where(e => e.vch_id == 123).ToList();
_

そして、先のコードのどこかで、エンティティレコードを次のようにフィルター処理しようとしました。

_foreach (vDetail item in lstVDetails)
{
    ... 

    int purposeId = entityvDetails.Where(e => e.sad_id == item.sad_id).FirstOrDefault().payInstallment.appsDetail.purposes.prp_id;

    ...
}
_

コードのコンパイルは完璧です。ただし、次のエラーを返すランタイム(すべてのナビゲーションが含まれますが):

_Object reference not set to an instance of an object.
_

そこで、ウォッチウィンドウを使用してデバッグを設定しました。ウォッチウィンドウで次のステートメントを分析します。

_entityVoucherDetails.Where(e => e.sad_id == item.sad_id).FirstOrDefault()
_

ウォッチウィンドウで次のエラーが生成されました。

式にラムダ式を含めることはできません。

誰かが私に理由を教えてくれたら教えてください。

32
Khadim Ali

デバッガー(ウォッチウィンドウ)でのLambda式の評価はまだサポートされていません。

そこにオープン 機能要求 があります。

問題をデバッグするには、ラムダ式の結果を専用の変数に割り当て、それを次のステートメントで使用する必要があります。

var entity = entityvDetails.Where(e => e.sad_id == item.sad_id).FirstOrDefault();

アップデート08/2014:マイクロソフトは、機能要求に関するアップデートを投稿し、作業を開始したことを発表しました。

ここが私たちの立場です。

  • 1)これがあなたと同じように機能することを望みます。審査中ではなく、進行中です。
  • 2)動作させる方法を見つけました。書き換えが必要ですeverything
  • 3)すべてを書き換えています。
  • 4)すべてを書き換えるには、多くの時間と多くのテストが必要です。

2014年11月のアップデート:Microsoftは、VS2015でいくつかの制限を付けて最終的に実装しました。 こちらをご覧ください

57
BlueM

それでもVisual Studio 2010または2013を使用する必要がある場合は、パッケージマネージャーコンソールでラムダ式を使用できます。詳細については、my SOこちらに投稿してください:

イミディエイトウィンドウでラムダを評価できないのはなぜですか

これは 元のソース です

2
user8128167