[英]Get data if nullable relationship field using EF Core query in ASP.NET Core MVC
我有一個基於 ASP.NET 核心的網站。 我想使用 EF Core 查詢獲取數據,即使它是 null,它也會返回值。 我想獲取包括OrderNumber
和ItemName
事件OrderID
的數據是 null。 我嘗試了以下查詢,但它只顯示了 2 條具有OrderID
的記錄。
請指教:
詢問:
var FilteredTransactionData = (from tr in _Context.Transactions
join or in _Context.Orders on tr.OrdersID equals or.OrdersID
join it in _Context.Items on tr.ItemID equals it.ItemID
select new
{
TransactionID = tr.TransactionID,
ItemName = it.ItemName,
OrderNumber = or.OrderNumber,
TransactionQuantity = tr.TransactionQuantity,
}).ToList();
Model:
public class Transactions
{
public long TransactionID { get; set; }
public long ItemID { get; set; } //Relationship
public long? OrderID { get; set; } //Relationship
public decimal TransactionQuantity { get; set; }
}
public class Orders
{
public long OrdersID { get; set; }
public string OrderNumber { get; set; }
}
public class Items
{
public long ItemID { get; set; }
public string ItemName { get; set; }
}
事務表
TransactionID | ItemID | OrderID | TransactionQuantity
----------------+-----------+---------------+-----------------------
1 101 Null 10
2 102 Null 12
3 103 201 20
4 101 202 20
5 102 Null 10
需要 output
TransactionID | ItemName | OrderNumber | TransactionQuantity
----------------+---------------+---------------+-----------------------
1 Item101 10
2 Item102 12
3 Item103 Order201 20
4 Item101 Order202 20
5 Item102 10
join or in _Context.Orders on tr.OrdersID equals or.OrdersID
在這里,您通過OrdersID
加入兩個表。 這就是為什么 Null OrdersID 行被忽略的原因。 那是加入的實際行為。
您需要做的是將Transactions
表左連接到Orders
表。 在這種情況下,即使OrdersID
為 Null,也會選擇Transactions
表中的所有行。
您可以這樣編寫查詢:
var FilteredTransactionData = from tr in _Context.Transactions
join or in _Context.Orders on on tr.OrdersID equals or.OrdersID into gj
from x in gj.DefaultIfEmpty()
select new
{
TransactionID = tr.TransactionID,
ItemName = it.ItemName,
OrderNumber = or.OrderNumber,
TransactionQuantity = tr.TransactionQuantity,
}).ToList();
請注意上面對into gj
的選擇,然后使用gj.DefaultIfEmpty()
選擇 Null 行
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.