Получить данные, если поле отношения обнуляемо, используя запрос EF Core в ASP. NET Core MVC - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть ASP. NET Core-сайт. Я хочу получить данные, используя запрос EF Core таким образом, чтобы он возвращал значение, даже если оно нулевое. Я хочу получить данные, включая OrderNumber и ItemName, событие OrderID равно нулю. Я пробовал следующий запрос, но он показывает только 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();

Модель:

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

Требуемый вывод

TransactionID   |   ItemName    |   OrderNumber |   TransactionQuantity
----------------+---------------+---------------+-----------------------
1                   Item101                             10
2                   Item102                             12
3                   Item103         Order201            20
4                   Item101         Order202            20
5                   Item102                             10

1 Ответ

0 голосов
/ 18 апреля 2020
join or in _Context.Orders on tr.OrdersID equals or.OrdersID

Здесь вы объединяете две таблицы OrdersID. Вот почему строки пустых OrdersID игнорируются. Таково реальное поведение при присоединении.

Вам нужно просто присоединить таблицу Transactions к таблице Orders. В этом случае строки из таблицы Transactions будут выбраны все строки, даже если OrdersID us Null.

Вы можете написать запрос следующим образом:

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()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...