Lambda表达式检索可以为null的属性

mis*_*tle 2 c# linq lambda coalesce

基本上我有一个元素列表,我要在其中检索可以为null或costant字符串的属性.当然有一种程序方法可以做到这一点但是因为我正在尝试使用lambdas我想使用它们.

我试过用这个lambda:

td.Where(x => !String.IsNullOrEmpty(x.BALANCE_MU)).FirstOrDefault().BALANCE_MU
Run Code Online (Sandbox Code Playgroud)

这里的问题是有时候所有的x.BALANCE_MUs都是null,所以FirstOrDefault()是null并且尝试访问BALANCE_MU会抛出异常.如果所有元素都为null,我应该返回一个空字符串.

有没有更好的方法来保持lambda域?

Ser*_*kiy 7

您可以投影结果以避免异常:

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

字符串的BTW默认值不是空字符串 - 它是null.如果你想要空字符串,那么建议使用@newStackExchangeInstance,你可以使用合并运算符: balance ?? "".

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

var balance = td.Select(x => x.BALANCE_MU)
                .FirstOrDefault(b => !String.IsNullOrEmpty(b)) ?? "";
Run Code Online (Sandbox Code Playgroud)