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

Entity Framework查询参考表失败,如何获取未关联WorkOrder的JobOrderItem

查询未关联WorkOrder的JobOrderItem实现方案

你可以通过以下两种方式实现需求,两种写法都会被EF Core翻译为高效的SQL语句执行:

方式1:直接从JobOrderItem表查询(推荐)

如果你最终需要返回的是JobOrderItem列表,直接从子表查询逻辑更简洁:

var unusedJobOrderItems = await _context.JobOrderItems
    // 若需要关联父工单的字段可保留Include,不需要可删除
    .Include(item => item.JobOrder)
    // 筛选条件:不存在任何关联的WorkOrder记录
    .Where(item => !_context.WorkOrders.Any(workOrder => workOrder.JobOrderItemId == item.Id))
    // 可选:额外筛除已删除的父工单对应子项
    .Where(item => !item.JobOrder.IsDeleted)
    .ToListAsync();

方式2:从JobOrder父表出发查询

如果你需要保留从JobOrder表开始查询的写法,可通过SelectMany拉平符合条件的子项:

var result = await _context.JobOrders
    .Include(jobOrder => jobOrder.JobOrderItems)
    // 可选:只查询未删除的有效工单
    .Where(jobOrder => !jobOrder.IsDeleted)
    .SelectMany(jobOrder => jobOrder.JobOrderItems
        // 筛选没有关联WorkOrder的子项
        .Where(item => !_context.WorkOrders.Any(wo => wo.JobOrderItemId == item.Id))
    )
    .ToListAsync();

可选优化

如果你在JobOrderItem模型类中添加反向导航属性:

public class JobOrderItem : BaseEntity
{
    // 原有属性不变
    // 新增WorkOrder反向导航
    public virtual IList<WorkOrder> WorkOrders { get; set; }
}

查询写法可以进一步简化:

var unusedJobOrderItems = await _context.JobOrderItems
    .Include(item => item.JobOrder)
    .Where(item => !item.WorkOrders.Any())
    .ToListAsync();

内容的提问来源于stack exchange,提问作者Ram R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:15:03