Записи выбора структуры каркаса сущности не существуют в объединяемой таблице или поле имеет значение null - PullRequest
0 голосов
/ 05 сентября 2018

Я строю c# lambda с Entity Framework

У меня есть две таблицы с внутренним соединением ... (Order и MarketOrder). OrderID - это PK на Order Table и FK на MarketOrder Table.

Возобновить мою модель, как это

 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 голосов
/ 05 сентября 2018
db.Order.Where(o => o.MarketOrder?.Status == null)

То же, что и

db.Order.Where(o => o.MarketOrder == null || o.MarketOrder.Status == null)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...