重构LINQ查询以容纳空值/缺少属性

时间:2015-04-29 09:34:31

标签: linq refactoring

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

MyCollection.StringArray
    .Where(e => e.name == "aproperty") != null 
      ? MyCollection.StringArray.Where(e => e.name == "aproperty") FirstOrDefault().value 
      : string.Empty;

最终,我想要做的就是从属性中提取值,如果它存在于集合中,否则我需要一个空字符串(或null)。但是,我不希望抛出任何异常。

1 个答案:

答案 0 :(得分:1)

如果您想要阻止在尝试访问空序列时获得的异常,可以使用DefaultIfEmpty

string value = MyCollection.StringArray
    .Where(e => e.name == "aproperty")
    .Select(e => e.value)
    .DefaultIfEmpty(string.Empty)
    .First();

首先选择value属性是很重要的,即使它不存在也是安全的。使用DefaultIfEmpty,您可以使用First代替FirstOrDefault