如果不是空的话,从财产中获取价值,否则获得Linq的其他财产

Viv*_*ndi 1 c# linq

我有一个Linq查询,我从中获取数据,如下所示:

var attachedItems = items.ToDictionary(
                               w => w.Number,
                               w => w.Attachments.Select(a => a.Name).ToArray()
                    );
Run Code Online (Sandbox Code Playgroud)

这到目前为止工作正常,但有时Attachments.Name属性是空的.然后我想得到另一个属性的价值.

为了显示:

var attachedItems = items.ToDictionary(
                               w => w.Number,
                               w => w.Attachments.Select(a => a.Name).ToArray()
                               // If Attachments.Name == Empty, then get
                               w => w.EquipmentCode
                    );
Run Code Online (Sandbox Code Playgroud)

我如何在Linq查询中执行此操作?

Bas*_*Bas 6

var attachedItems = items.ToDictionary(
       w => w.Number,
       w => w.Attachments.Select(a => a.Name)
                         .DefaultIfEmpty(w.EquipmentCode)
                         .ToArray()
                );
Run Code Online (Sandbox Code Playgroud)

这将检索所有附件名称,如果没有附件,EquipmentCode则返回包含该值的单个项目的数组.

如果在该EquipmentCode属性上定义了属性,Attachment并且您需要将其作为每个附件的后备值,请检查Jon Skeet的答案.


Jon*_*eet 6

听起来你只想要条件运算符:

var attachedItems = items.ToDictionary(
      w => w.Number,
      w => w.Attachments.Select(a => string.IsNullOrEmpty(a.Name) 
                                     ? a.EquipmentCode : a.Name)
                        .ToArray());
Run Code Online (Sandbox Code Playgroud)