我正在用c# lambda
构建一个Entity Framework
我有两个具有内部联接关系的表...(Order
和MarketOrder
)。 OrderID
是Order 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
我该如何解决。
谢谢。
答案 0 :(得分:1)
db.Order.Where(o => o.MarketOrder?.Status == null)
与
相同db.Order.Where(o => o.MarketOrder == null || o.MarketOrder.Status == null)