2

基本的に、null または costant 文字列のいずれかになるプロパティを取得する必要がある要素のリストがあります。もちろん、これを行う手続き的な方法がありますが、ラムダを試しているので、それらを使用したいと思います。

私はこのラムダを使用しようとしました:

td.Where(x => !String.IsNullOrEmpty(x.BALANCE_MU)).FirstOrDefault().BALANCE_MU

ここでの問題は、すべてx.BALANCE_MUの s が null の場合があるため、FirstOrDefault()null であり、BALANCE_MU にアクセスしようとすると例外がスローされることです。すべての要素が null の場合、空の文字列を返す必要があります。

ラムダドメインにとどまってこれを行うより良い方法はありますか?

4

1 に答える 1

7

例外を回避するために結果を射影できます。

var balance = td.Where(x => !String.IsNullOrEmpty(x.BALANCE_MU))
                .Select(x => x.BALANCE_MU) // select property here
                .FirstOrDefault();

文字列のところでデフォルト値は空の文字列ではありません - それはnullです。空の文字列が必要な場合は、 @newStackExchangeInstance が示唆するように、結合演算子: を使用できます balance ?? ""

もう1つの更新。FirstOrDefaultフィルタリングの前にプロジェクションを行う場合は、オーバーロードされたメソッドを使用できます。

var balance = td.Select(x => x.BALANCE_MU)
                .FirstOrDefault(b => !String.IsNullOrEmpty(b)) ?? "";
于 2013-06-07T15:21:06.987 に答える