0

I have three tables, joborder, joborder items and workorder.

joborder is the parent and joborderitem is the child table. workorder has a joborder item id as foreign key to the joborder item table.

I need to get joborderitems where their joborderid's is not present in workorder. workorder will create based on jobordrritem .. so please guide me how get those items ?

Model classes:

public JobOrder()
{
    JobOrderGuid = Guid.NewGuid();
    Weight = 0;
}

public Guid JobOrderGuid { get; set; }
public string JobOrderNumber { get; set; }
public int OrderStatusId { get; set; }
public bool IsDeleted { get; set; }
public int? UQCId { get; set; }  // Future  purpose
public decimal? Weight { get; set; } // Future  purpose

public virtual IList<JobOrderItem> JobOrderItems { get; set; }

#region Custom properties

/// <summary>
/// Gets or sets the order status
/// </summary>
public OrderStatus OrderStatus
{
    get => (OrderStatus)OrderStatusId;
    set => OrderStatusId = (int)value;
}
        
#endregion


public class JobOrderItem : BaseEntity
{
    public int JobOrderId { get; set; }
    public int SNo { get; set; }
    public int ProductId { get; set; }
    public decimal OrderQuantity { get; set; }
    public decimal ReceivedQuantity { get; set; }
    public decimal? ItemWeight { get; set; }
    public bool IsReceived { get; set; }
    public string Details { get; set; }

    public virtual JobOrder JobOrder { get; set; }
    public virtual Product Product { get; set; }
}

public class WorkOrder : BaseEntity
{
    public WorkOrder()
    {
        WorkOrderGuid = Guid.NewGuid();
    }

    public Guid WorkOrderGuid { get; set; }
    public string WorkOrderNumber { get; set; }
    public int JobOrderItemId { get; set; }  // REFERENCE ID 
    public string Details { get; set; }     
    public DateTime WorkStartDate { get; set; }
    public DateTime? WorkCompletedDate { get; set; }

    public virtual JobOrderItem JobOrderItem { get; set; }
    public virtual IList<WorkOrderStateInfo> WorkOrderStateInfo { get; set; }
    public virtual IList<WorkOrderItem> WorkOrderItems { get; set; }
}

QUERY :

var result = _context.JobOrders
                     .Include(x => x.JobOrderItems) .....??

Please guide me how to return list of orderitems that are not used in any workorder .. thanks in advance

Ram R
  • 11
  • 4

1 Answers1

0

Include is not for querying data but for loading related data. Simple LINQ query with LEFT JOIN can solve your problem.

var withoutWorkOrder = 
    from ji in context.JobOrderItems
    join wo in context.WorkOrders on ji.Id equals wo.JobOrderItemId into gj
    from wo in gj.DefaultIfEmpty()
    where (int?)wo.Id == null
    select ji;
Svyatoslav Danyliv
  • 21,911
  • 3
  • 16
  • 32