簡體   English   中英

在 ASP.NET Core MVC 中使用 EF Core 查詢獲取可為空的關系字段的數據

[英]Get data if nullable relationship field using EF Core query in ASP.NET Core MVC

我有一個基於 ASP.NET 核心的網站。 我想使用 EF Core 查詢獲取數據,即使它是 null,它也會返回值。 我想獲取包括OrderNumberItemName事件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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM