我有一个Linq查询,我可以从这样的对象中获取数据:
var attachedItems = items.ToDictionary(
w => w.Number,
w => w.Attachments.Select(a => a.Name).ToArray()
);
到目前为止,此工作正常,但有时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
);
如何在Linq查询中执行此操作?
答案 0 :(得分:6)
var attachedItems = items.ToDictionary(
w => w.Number,
w => w.Attachments.Select(a => a.Name)
.DefaultIfEmpty(w.EquipmentCode)
.ToArray()
);
这将检索所有附件名称,如果没有附件,则返回包含EquipmentCode
值的单个项目的数组。
如果在EquipmentCode
上定义了Attachment
属性,并且您需要将其作为每个附件的后备值,请检查Jon Skeet的答案。
答案 1 :(得分:6)
听起来你只想要条件运算符:
var attachedItems = items.ToDictionary(
w => w.Number,
w => w.Attachments.Select(a => string.IsNullOrEmpty(a.Name)
? a.EquipmentCode : a.Name)
.ToArray());
答案 2 :(得分:1)
您可以使您的Select语句使用lambda并手动检查属性,如下所示:
var attachedItems = items.ToDictionary(
w => w.Number,
w => w.Attachments.Select(a => {
if(String.IsNullOrEmpty(a.Name) == false)
return a.Name;
return a.EquipmentCode;
}).ToArray()
);