Как динамически получить свойство в таблице вместе со свойством другой таблицы? - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть таблица продуктов и таблица продвижения. и я хочу получить цену продукта, ассортимент продукта и таблицу продвижения.

в таблице продукта:

Id       Name         Price         Detail
1    ProductName1      10            dddd
2    ProductName2      12            ssss
3    ProductName3      14             1

в таблице продвижения:

Id       ProductId          Price           StartDate      EndDate
1            1                20             2020/06/06     2020/07/07

Я хочу узнать цену продукта. и получит Таблицу продвижения, если есть цена для Продукта.

var product =_context.Products.FindAsync(1);

product.Price - правильное значение. например. Если я хочу получить продукт с идентификатором 1, а затем я получаю промоушен ProductId 1, существует цена 20, тогда цена, которую я получаю, равна 20. Если я хочу получить продукт 2, цены в тогда я получаю цену 12.

Я создам класс:

public class Product{
    private decimal _price{get;set;}
    public int Id {get;set;}
    public string Name {get;set;}
    public decimal Price{
          get{
             var promote = await _context.Promotes.Where(p=>p.ProductId==Id).ToListAsync();
             if(promote.Count>0){
                  return promote[0].Price;
             }
             return _price;
          }
          set{_price=value;}

Но это не сработает. Как это сделать?

1 Ответ

0 голосов
/ 25 апреля 2020

Если вы можете использовать метод EF Core Include для включения Promote внутри модели Продукта, то вам просто нужно запросить эти данные один раз.

var productList = 
    _context.Products.Where(product => product.Id == id)
                         .Include(product => product.Promote)
                     .ToList();

Теперь product.Price вернет promote.Price, если оно не равно нулю, в противном случае возвращается product._price.

public class Product
{
    private decimal _price;

    public int Id { get; set; }

    public string Name { get; set; }

    public decimal Price
    {
        get => Promote?.Price ?? _price;
        set => _price = value;
    }

    public Promote Promote { get; set; }
}

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