简体   繁体   English

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

[英]entity framework select records do not exists in join table or field is null

I am building an c# lambda with Entity Framework 我正在使用Entity Framework构建c# lambda

I have two tables with inner join relationship...( Order and MarketOrder ). 我有两个具有内部MarketOrder关系的表...( OrderMarketOrder )。 OrderID is the PK on Order Table and the FK on MarketOrder Table. OrderIDOrder Table上的PK和市场Order Table的FK MarketOrder Table.

Resuming my Model is like this 恢复我的模型是这样的

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

I need to select records do not exists in join table or is exists having field MarketOrder.Status is null 我需要选择MarketOrder.Status is null表中不存在的记录,或者存在具有字段MarketOrder.Status is null

I taste this 我尝这个

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

I works fine when do not exists in other table but I can not use it in case it exists with Status == null. 当其他表中不存在该文件时,我可以正常工作,但如果Status == null时存在该表,我将无法使用它。

Whe the relationship is One to Many. 关系是一对多的。 In Order class I have the property 在订单类中,我有财产

 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();

it Works fine. 它工作正常。

I have the problem when the relationship is One To One . 当关系是One To One时,我有问题。 In Order Class I have the property 在订单类中,我具有属性

 public virtual MarketOrder MarketOrders { get; set; }

the line 线

order.MarketOrders.DefaultIfEmpty()

Does not work. 不起作用。 order.MarketOrders do not have the method DefaultIfEmpty() . order.MarketOrders没有方法DefaultIfEmpty() If I use order.MarketOrders.ToString().DefaultIfEmpty() The clause where marketOrder.OrderID do not have property OrderID 如果我使用order.MarketOrders.ToString().DefaultIfEmpty()子句where marketOrder.OrderID不具有属性OrderID

How can I solved it. 我该如何解决。

Thanks. 谢谢。

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

如同

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM