无法从实体框架的引用表中检索数据
Posted
技术标签:
【中文标题】无法从实体框架的引用表中检索数据【英文标题】:Unable to retrieve data from reference table from Entity Framework 【发布时间】:2021-09-15 06:53:10 【问题描述】:我有三个表,joborder
、joborder items
和 workorder
。
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 ***.com/a/16801205/861716 @GertArnold,已过滤的 Include 与此问题无关。 @SvyatoslavDanyliv 不确定。这个问题不是 100% 清楚的。 【参考方案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;
【讨论】:
以上是关于无法从实体框架的引用表中检索数据的主要内容,如果未能解决你的问题,请参考以下文章