2

基本上,我有一个元素列表,我必须在其中检索可以为 null 或常量字符串的属性。当然有一种程序方法可以做到这一点,但由于我正在尝试使用 lambda,所以我想使用它们。

我试过使用这个 lambda:

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

这里的问题是有时所有x.BALANCE_MU的 s 都是空的,所以FirstOrDefault()也是空的,并且尝试访问 BALANCE_MU 会引发异常。如果所有元素都是空的,我应该返回一个空字符串。

有没有更好的方法来做到这一点留在 lambda 域中?

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 ?? ""

还有一个更新。FirstOrDefault如果您要在过滤之前进行投影,则可以使用 overloaded方法:

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