Мое предложение заключается в том, что вы добавляете вспомогательные методы в ваш основной класс, например, GetCurrentRent (), GetCurrentPrice (), где вы инкапсулируете .Where(i => i.Iscurrent).FirstOrDefault()
logi c. Затем в своем выражении Select
вы просто вызываете эти вспомогательные методы. Это значительно очистит этот код, а также сохранит инкапсуляцию вашего 'logi c' в классе.
models = _context.something
.Where(i => i.Amount > 0)
.Select(o => new somemodel
{
one = (o.property.GetCurrentPrice().Value - o.property.GetCurrentPrice().Value.Price).ToString(),
two = o.property.GetCurrentPrice().Value.Price,
three = o.property.GetCurrentPrice().Value.Price.ToPriceStr("£"),
four = o.property.GetCurrentRent().Rent * 1200 / o.property.GetCurrentRent().Price,
five = Convert.ToInt64(o.property.GetCurrentPrice().Value) * o.property.amount,
six = (Convert.ToInt64(o.property.GetCurrentPrice().Value) * o.property.amount).ToPriceStr("£"),
})
.Distinct()
.ToList();
, после чего вы сможете сделать еще один шаг вперед и выбрать только текущую цену и аренду как tuple ', а затем запустите свою логику c над этим:
models = _context.something
.Where(i => i.Amount > 0)
.Select(x => new { Amount = x.amount, CurrentPrice = x.GetCurrentPrice(), CurrentRent = x.GetCurrentRent() })
.Select(o => new somemodel
{
one = (o.CurrentPrice.Value - o.CurrentPrice.Value.Price).ToString(),
two = o.CurrentPrice.Value.Price,
three = o.CurrentPrice.Value.Price.ToPriceStr("£"),
four = o.CurrentRent.Rent * 1200 / o.CurrentRent.Price,
five = Convert.ToInt64(o.CurrentPrice.Value) * o.Amount,
six = (Convert.ToInt64(o.CurrentPrice.Value) * o.Amount).ToPriceStr("£"),
})
.Distinct()
.ToList();