重构LINQ查询以适应空值/缺少的属性
我有一个字符串数组,它有一个需要解析的可变数量的属性。我正在使用LINQ来解析这些数据,但我不禁想,有一种比复制LINQ更有效/更优雅的方法来实现这一点。 是否有一种固有的方式来解释空值(因为属性可能存在于数组中,也可能不存在于数组中),而不是我在这里所做的:重构LINQ查询以适应空值/缺少的属性,linq,refactoring,Linq,Refactoring,我有一个字符串数组,它有一个需要解析的可变数量的属性。我正在使用LINQ来解析这些数据,但我不禁想,有一种比复制LINQ更有效/更优雅的方法来实现这一点。 是否有一种固有的方式来解释空值(因为属性可能存在于数组中,也可能不存在于数组中),而不是我在这里所做的: MyCollection.StringArray .Where(e => e.name == "aproperty") != null ? MyCollection.StringArray.Where(e =&
MyCollection.StringArray
.Where(e => e.name == "aproperty") != null
? MyCollection.StringArray.Where(e => e.name == "aproperty") FirstOrDefault().value
: string.Empty;
最后,如果属性存在于集合中,我要做的就是从属性中提取该值,否则我需要一个空字符串(或null)。但是,我不希望抛出任何异常。如果要防止在尝试访问空序列时出现异常,可以使用
DefaultIfEmpty
:
string value = MyCollection.StringArray
.Where(e => e.name == "aproperty")
.Select(e => e.value)
.DefaultIfEmpty(string.Empty)
.First();
首先选择
值
属性非常重要,即使该属性不存在,它也是安全的。使用DefaultIfEmpty
可以使用First
而不是不编译的FirstOrDefault
。请提供编译代码,或者至少提供清楚显示您试图实现的目标的代码。您有StringArray吗?或者你有自己的对象列表?