You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 12:20:22