1. ホーム
  2. c#

[解決済み] 式にラムダ式を含めることができない

2022-02-25 11:39:25

質問

を取得しました。 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()

を実行したところ、以下のエラーが発生しました。

<ブロッククオート

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

どなたか原因を教えてください。

解決方法は?

デバッガ(ウォッチウィンドウ)でのラムダ式の評価には未対応です。

を開くと 機能要望 を使用することができます。

デバッグのためには、ラムダ式の結果を専用の変数に代入し、次の文でそれを使用する必要があります。

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


2014年08月更新 マイクロソフトは、機能要求の更新を投稿し、その作業を開始したことを発表しました。

<ブロッククオート

では、現状を説明します。

  • 1) 私たちは、皆さんと同じように、これを成功させたいと考えています。これはレビュー中ではなく、進行中です。
  • 2) どうすれば動くかわかった。 すべて .
  • 3)すべてを書き換えています。
  • 4) すべてを書き換えるには、多くの時間と多くのテストが必要です。

2014年11月に更新しました。 マイクロソフトがついにVS2015で一部制限付きで実装しました。 こちらをご覧ください。