重构LINQ查询以适应空值/缺少的属性

重构LINQ查询以适应空值/缺少的属性,linq,refactoring,Linq,Refactoring,我有一个字符串数组,它有一个需要解析的可变数量的属性。我正在使用LINQ来解析这些数据,但我不禁想,有一种比复制LINQ更有效/更优雅的方法来实现这一点。 是否有一种固有的方式来解释空值(因为属性可能存在于数组中,也可能不存在于数组中),而不是我在这里所做的: MyCollection.StringArray .Where(e => e.name == "aproperty") != null ? MyCollection.StringArray.Where(e =&

我有一个字符串数组,它有一个需要解析的可变数量的属性。我正在使用LINQ来解析这些数据,但我不禁想,有一种比复制LINQ更有效/更优雅的方法来实现这一点。 是否有一种固有的方式来解释空值(因为属性可能存在于数组中,也可能不存在于数组中),而不是我在这里所做的:

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吗?或者你有自己的对象列表?