Я строю 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
Как я могу это решить.
Спасибо.