Как использовать свойство ICollection для проверки bool - PullRequest
1 голос
/ 08 марта 2019

У меня есть следующие объекты:

public class Order
{
    public int Id { get; set; }
    public ICollection<LineItem> LineItems { get; set; }
}

public class LineItem
{
    public int Id { get; set; }
    public int Qty { get; set; }
}

Я хотел бы просто проверить, есть ли в заказе большие элементы (кол-во> 50), поэтому я хотел бы добавить свойство в класс Order следующим образом:

public class Order
{
    public int Id { get; set; }
    public ICollection<LineItem> LineItems { get; set; }

    public bool HasLargeItems
    {
        get
        {
            return LineItems.Any(l => l.Qty > 50);
        }
    }
}

Это, однако, не работает из-за отложенной загрузки.Но если я использую .Include (o => o.LineItems), он извлечет все LineItems и затем сделает сравнение в памяти.Я бы предпочел, чтобы это сгенерировало и выполнило запрос к базе данных и просто вернуло мне логическое значение.

Возможно ли это сделать как свойство сущности Order или мне нужно написать какой-нибудь другой внешний объект запроса, который использует DbContext для выполнения таких проверок?

Ответы [ 2 ]

0 голосов
/ 08 марта 2019

Попробуйте, это может помочь:

public bool HasItems
    {
        get{return LineItems.AsQueryable().Any(x => false);}
    }
0 голосов
/ 08 марта 2019

Один из способов сделать это - использовать анонимный выбор

   var order = dbContext.Orders
     .Where(o => o.Id == id)
     .Select(o => new { Order = o, HasLargeItems = o.LineItems.Count > 50 })
     .SingleOrDefault();
...