0

良い一日!

以下に示すように、このクエリがあります。

jt.SummarySpecs.Where(
x => true
)
.FirstOrDefault()
.DocSpecs
.Where(
    x => x.DocID == x.DocID
)
.FirstOrDefault()
.FinishingOptionsDesc[0] = option;

しかし、コードが実行されると、finishingOptionsDesc[0] の値が更新されません...

上記のクエリの何が問題になっていますか?


クラスの属性:

"SummarySpecs.cs"
    public DocSpec[] DocSpecs { get; set; }

"DocSpecs.cs"
    public string[] FinishingOptionsDesc { get; set; }

私の唯一の懸念は、FinishingOptionDesc の最初の文字列を更新することです。

ありがとう

4

2 に答える 2

1

そのエラーは、何かが null であることを意味します。null の戻り値が存在する可能性がある 1 つのステートメントに、チェックされていない場所が 4 つあります。これらのコレクションが空の場合、FirstOrDefault への呼び出しのいずれかが null を返す可能性があります。または、返されたオブジェクトの DocSpecs が null であるか、FinishingOptionsDesc が null である可能性があります。

理想的には、このステートメントを少し分割して、null チェックを挿入します。これらのポイントのいずれも nullであってはならないことを知っていると言えます。その場合、例外の発生を許可することは有効かもしれませんが、間違いなく、ステートメントを分割して、例外が発生した場所に関するより良いエラー レポートを取得する価値があります。

于 2013-04-09T07:03:25.793 に答える
0

このようなものを試してください.. 更新

if(jt.SummarySpecs.Select(a=>a.DocSpecs).Any())
{
    var docSpecs = jt.SummarySpecs.Select(a => a.DocSpecs)
    docSpecs.FinishingOptionsDesc[0] = option;
}
于 2013-04-09T07:50:55.723 に答える