1

我有这个 C# 代码:

        var result =
            from entry in feed.Descendants(a + "entry")
            let content = entry.Element(a + "content")
            let properties = content.Element(m + "properties")
            let notes = properties.Element(d + "Notes")
            let title = properties.Element(d + "Title")
            let partitionKey = properties.Element(d + "PartitionKey")
            where partitionKey.Value.Substring(2, 2) == "06" && title != null && notes != null
            select new Tuple<string, string>(title.Value, notes.Value);

仅当我选择注释时才有效!= null

如果 notes.Value 为空,我如何将元组中 notes.Value 的值设置为“n/a”,而不是这样做?

4

3 回答 3

7

您可以使用空合并运算符

notes.Value ?? "n/a"

其中说“如果不为空则获取值,否则使用辅助参数。”

于 2013-06-21T13:05:36.397 回答
2

您可以使用空合并运算符 ??

select new Tuple<string, string>(title.Value, notes.Value ?? "n/a");

请注意,您也可以使用Tuple.Create而不是元组构造函数:

select Tuple.Create(title.Value, notes.Value ?? "n/a");
于 2013-06-21T13:04:53.917 回答
1

在 的情况下,您可以在表达式级别Enumerable String使用 null 合并运算符以在null 的情况下具有默认值let

let notes = properties.Element(d + "Notes") ?? "n/a"
 let title = properties.Element(d + "Title") ?? "n/a"

然后将where子句重写为

  where partitionKey.Value.Substring(2, 2) == "06"
  select new Tuple<string, string>(title.Value, notes.Value);

正如所指出的,在 XElement 的情况下,您可以交替使用

    where partitionKey.Value.Substring(2, 2) == "06"
    select new Tuple<string, string>(title.Value??"n/a", notes.Value??"n/a");
于 2013-06-21T13:11:31.823 回答