Почему я получаю неправильный результат фильтра? - PullRequest
0 голосов
/ 17 февраля 2019

Я использую Entity Framework, чтобы получить сущность Product с Id = 5002. У каждого продукта есть список заказов.Так что я фильтрую ордера, чтобы получать только ордера с Total greatter 10.00, но EF возвращает мне полный список.

using (var context = new SuperMarketContext())
{
    var product = context.Product
        .Include(p => p.Orders)
        .Where(p => p.Id == 5002)
        .First();

    context.Entry(product)
        .Collection(p => p.Orders)
        .Query()
        .Where(o => o.Total > 10)
        .Load();

    foreach (var item in product.Orders)
    {
        Console.WriteLine(item);
    }
}

Как я уже сказал, это принесет мне все ордера только на один, чем 10. Почемуэто происходит?

EF Core 1.1.2

.Net Framework 4.6.1

1 Ответ

0 голосов
/ 17 февраля 2019

Если у вас уже есть список заказов на этот продукт, зачем снова запрашивать базу данных?

Исправлено к вашему коду:

using (var context = new SuperMarketContext())
{
    var product = context.Product
        .Include(p => p.Orders)
        .Where(p => p.Id == 5002)
        .First();

    var filteredOrders = context.Entry(product)
        .Collection(p => p.Orders)
        .Query()
        .Where(o => o.Total > 10)
        .Load();

    foreach (var item in filteredOrders)
    {
        Console.WriteLine(item);
    }
}

Мои предложения:

Опция1:

using (var context = new SuperMarketContext())
{
    var product = context.Product
        .Include(p => p.Orders)
        .Where(p => p.Id == 5002)
        .First();

    var orders = product.Orders.Where(o => o.Total > 10).ToList();

    foreach (var item in orders)
    {
        Console.WriteLine(item);
    }
}

Вариант 2:

using (var context = new SuperMarketContext())
{
    var product = context.Product
        .Include(p => p.Orders)
        .Where(p => p.Id == 5002 && p.Orders.Where(t => t.Total > 10))
        .First();

    foreach (var item in product.Orders)
    {
        Console.WriteLine(item);
    }
}

Дайте мне знать, если какой-либо из этих работ:)

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