【问题标题】:Unable to retrieve data from reference table from Entity Framework无法从实体框架的引用表中检索数据
【发布时间】:2021-09-15 06:53:10
【问题描述】:

我有三个表,joborderjoborder itemsworkorder

joborder 是父表,joborderitem 是子表。 workorder 有一个 joborder item id 作为 joborder item 表的外键。

我需要在workorder 中不存在其joborderid 的joborderitems。 workorder 将基于jobordrritem 创建.. 所以请指导我如何获得这些项目?

模型类:

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; }
}

查询:

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

请指导我如何返回未在任何工作订单中使用的订单项列表 .. 提前致谢

【问题讨论】:

  • 你是哪个EF版本(请加标签)。
  • 格特·阿诺德 ..done
  • 如果您无法升级到 EF-core 5,那么您需要一个解决方法,f/e stackoverflow.com/a/16801205/861716
  • @GertArnold,已过滤的 Include 与此问题无关。
  • @SvyatoslavDanyliv 不确定。这个问题不是 100% 清楚的。

标签: entity-framework linq .net-core lambda ef-core-3.1


【解决方案1】:

Include不是查询数据,而是加载相关数据。使用LEFT JOIN 进行简单的 LINQ 查询可以解决您的问题。

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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-28
    • 2016-05-15
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 1970-01-01
    相关资源
    最近更新 更多