如何在LINQ的Select中简化LastContactedDate的赋值逻辑?
简化LINQ Select中的重复逻辑方案
你可以在LINQ的Select代码块中定义临时变量,把重复执行的FirstOrDefault查询提取出来,既能简化代码结构,也能避免重复执行相同的查询操作。以下是修改后的完整代码:
return _context.Table1 .Where(x => x.ContactId == contactKey.Id) .Include(x => x.Table2) .Include(x => x.Table3.Table4) .Select(a => { // 将重复的查询逻辑提取为临时变量 var targetTable4Entry = a.Table3.Table4?.FirstOrDefault(h => h.Id == a.Table2.FkId); return new MyReadModel { PriorityAssignment = true, // 利用null条件运算符简化空值判断 LastContactedDate = targetTable4Entry?.LastContactedDatetime ?? default }; }) .ToListAsync();
关键优化点:
- 用
a.Table3.Table4?.FirstOrDefault(...)替代原来的双重空值检查,通过null条件运算符自动处理a.Table3.Table4为null的情况 - 将重复的
FirstOrDefault查询结果赋值给targetTable4Entry变量,后续直接复用该变量,避免重复执行查询 - 用
?? default替代三元运算符,简化null值的默认赋值逻辑,效果和原代码一致
另外注意原代码中FirstOrDefault(h => && h.Id == a.Table2.FkId)存在语法错误(多了一个&&),修改时已修正。
内容的提问来源于stack exchange,提问作者Kamran Shahid
相关产品推荐
相关产品推荐

