实体框架选择记录在联接表中不存在,或者字段为空

时间:2018-09-05 12:23:39

标签: c# entity-framework lambda

我正在用c# lambda构建一个Entity Framework

我有两个具有内部联接关系的表...(OrderMarketOrder)。 OrderIDOrder Table上的PK和MarketOrder Table.上的FK

恢复我的模型是这样的

 public  class Order
    {
        [Key]
        public int OrderID { get; set; }
    
        public virtual MarketOrder MarketOrders { get; set; }
}


 public class MarketOrder
    {
        [Key]
        public int MarketOrderID { get; set; } // One sequence for all system market orders.
        public int OrderID { get; set; }
        public virtual Order Order { get; set; }
}        

我需要选择连接表中不存在的记录或存在字段MarketOrder.Status is null的记录

我尝尝

db.Order
.Where(c => !db.MarketOrder
    .Select(b => b.OrderID)
    .Contains(c.OrderID)
);

当其他表中不存在该函数时,我可以正常工作,但是如果Status == null,则无法使用它。

这种关系是一对多的。在Order类中,我具有属性

 public virtual List<MarketOrder> MarketOrders { get; set; }

var aa =(from order in db.OrderFunds
from marketOrder in order.MarketOrders.DefaultIfEmpty()
where marketOrder.OrderID == null || marketOrder.Status == null).ToList();

工作正常。

当关系为One To One时,我遇到了问题。在订单类中,我具有属性

 public virtual MarketOrder MarketOrders { get; set; }

线

order.MarketOrders.DefaultIfEmpty()

不起作用。 order.MarketOrders没有方法DefaultIfEmpty()。如果我使用order.MarketOrders.ToString().DefaultIfEmpty()子句where marketOrder.OrderID没有属性OrderID

我该如何解决。

谢谢。

1 个答案:

答案 0 :(得分:1)

db.Order.Where(o => o.MarketOrder?.Status == null)

相同
db.Order.Where(o => o.MarketOrder == null || o.MarketOrder.Status == null)