如何为特定字段返回null?基于Stack Overflow帖子的技术咨询
针对特定字段返回null的LINQ解决方案
嘿,我懂你现在的需求啦——之前你借助Stack Overflow的方法实现了返回null,但现在想精准控制ClosedDate这个字段,当FlowerDates里没有匹配指定花型的记录时,让它返回null对吧?
咱们直接看代码怎么调整,核心思路是用FirstOrDefault()替代会抛出异常的First()/Single(),同时确保字段类型支持null:
完整代码示例
select new FlowerMetaData { FlowerId = flowers.FlowerId, UpdatedDate = flowers.UpdatedDate, FlowerDates = FlowerDates.OrderBy(d => d.CreatedDate).ToList(), // 重点调整ClosedDate的逻辑 ClosedDate = FlowerDates .Where(c => c.FlowerType is "Rainbow Rose" or "Black Rose" or "SunFlower" or "Lotus" or "Tulip" or "Rose") // 先筛选出符合条件的记录,再提取你需要的ClosedDate值 .Select(c => c.ClosedDate) // 没有匹配项时返回null(如果是值类型,需要字段是可空的) .FirstOrDefault() };
关键注意事项
- 可空类型必须匹配:如果
ClosedDate是DateTime这种值类型,一定要在FlowerMetaData类里把它定义成可空类型DateTime?,否则没有匹配项时会返回DateTime.MinValue而不是null:public class FlowerMetaData { public int FlowerId { get; set; } public DateTime UpdatedDate { get; set; } public List<FlowerDate> FlowerDates { get; set; } public DateTime? ClosedDate { get; set; } // 这里用可空类型 } - 如果需要取最新的记录:要是你想从匹配的花型里取最新创建的那条的
ClosedDate,可以先排序再取:ClosedDate = FlowerDates .Where(c => c.FlowerType is "Rainbow Rose" or "Black Rose" or "SunFlower" or "Lotus" or "Tulip" or "Rose") .OrderByDescending(d => d.CreatedDate) // 按创建时间倒序,取最新的 .Select(c => c.ClosedDate) .FirstOrDefault()
这样调整后,当FlowerDates里没有符合指定花型的记录时,ClosedDate就会乖乖返回null啦~
内容的提问来源于stack exchange,提问作者Maddy
相关产品推荐
相关产品推荐

