【问题标题】:entity framework select records do not exists in join table or field is null连接表中不存在实体框架选择记录或字段为空
【发布时间】:2018-09-05 12:23:38
【问题描述】:

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

我有两个具有内部连接关系的表...(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

我该如何解决。

谢谢。

【问题讨论】:

  • 这与 jQuery 究竟有什么关系?
  • jQuery 是一个 javascript-framework,这个问题似乎与它无关。
  • 你可以发布你的模型订单和市场订单
  • 尝试左外连接。见 msdn:code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b
  • 嗨,我添加了模型类。谢谢

标签: c# entity-framework lambda


【解决方案1】:
db.Order.Where(o => o.MarketOrder?.Status == null)

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

【讨论】:

  • 市场订单?这意味着 MarketOrder 可以为空?
  • 请注意,第一种方法不起作用,因为条件运算符 ? l2sql 不支持。
  • 我不知道,我经常使用它,但它必须始终在对象上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多