如何使Linq选择返回值,如果所选择的值为空?

5
我有如下代码:

    [DisplayName("Created")]
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
    public DateTime? Created { get; set; }

    [DisplayName("Modified By")]
    public string ModifiedBy { get; set; }

    [DisplayName("Modified")]
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
    public DateTime? Modified { get; set; }

        from d in data
        select new Content.Grid
        {
            PartitionKey = d.PartitionKey,
            RowKey = d.RowKey,
            Order = d.Order,
            Title = d.Title,e
            Created = d.Created,
            CreatedBy = d.CreatedBy,
            Modified = d.Modified,
            ModifiedBy = d.ModifiedBy
        };

有可能d.Createdd.CreatedByd.Modifiedd.ModifiedBy为空。

如果它们为空,我该如何设置才能使选择返回n/a表示CreatedByModifiedBy,并为CreatedModified返回日期January, 1, 2012


这与Linq实际上没有任何关系。new Content.Grid { ... }是一个对象初始化器。 - Dave Hillier
1个回答

10

您可以使用null-coalescing operator (??)为可空值类型或引用类型提供默认值:

from d in data
select new Content.Grid
{
    PartitionKey = d.PartitionKey,
    RowKey = d.RowKey,
    Order = d.Order,
    Title = d.Title,e
    Created = d.Created ?? new DateTime(2012,1,1),
    CreatedBy = d.CreatedBy ?? "n/a",
    Modified = d.Modified ?? new DateTime(2012,1,1),
    ModifiedBy = d.ModifiedBy ?? "n/a"
};

这看起来非常不错。我有另一个带有连接的选择,我使用:Type = t == null ? null : t.Value,我也可以在那里使用这个运算符吗? - Alan2
不,这是一种不同的结构。null合并运算符用于当您有null但想要其他值时的情况。在您的连接中,如果存在null,则仍希望得到null,否则您希望得到其他内容。因此,只有像这样的情况:Type = t == null ? SomeDefaultType : t才能被改写为Type = t ?? SomeDefaultType - nemesv
谢谢,这个有效。最初我尝试在我的类中使用构造函数来使用 this 示例设置属性的默认值,但它没有起作用,为什么? - Shaiju T
如果d.boolfield == true,您如何将布尔值false分配给它? - Oracular Man

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接