Пример ниже представляет собой простой запрос Linq to SQL
, который вычисляет SecondsLeft
, TotalSeconds
и затем использует эти свойства SecondsPercentLeft
. Как вы можете выяснить, SecondsPercentLeft содержит выражения Linq из SecondsLeft
и TotalSeconds
и буквально дублирует их. Любые предложения о том, как использовать выражения Linq?
Не предлагать перемещать отмену свойства SecondsPercentLeft
в поля COMPUTED
, потому что позже я использую WHERE
, а Linq в SQL не знаю, как переводить поля COMPUTED
, зависящие от других полей который имеет выражения Linq.
var creditsLeftJobViews2 = _db.Users.Select(p => new UserView
{
Id = p.Id,
Email = p.Email,
FullName = p.FirstName + " " + p.LastName,
SecondsLeft = p.Orders.Where(w => w.Active && (w.TransactionType == TransactionType.Order || w.TransactionType == TransactionType.Subscription))
.Select(s => (int?) s.Seconds)
.Sum() ?? 0,
TotalSeconds = p.Orders.Where(w => w.Active && (w.TransactionType == TransactionType.Order || w.TransactionType == TransactionType.Subscription))
.Select(s => (int?) s.Plan.Seconds)
.Sum() ?? 0,
SecondsPercentLeft = (int)((double) (p.Orders.Where(w => w.Active && (w.TransactionType == TransactionType.Order || w.TransactionType == TransactionType.Subscription))
.Select(s => (int?) s.Seconds)
.Sum() ?? 0) / (p.Orders.Where(w => w.Active && (w.TransactionType == TransactionType.Order || w.TransactionType == TransactionType.Subscription))
.Select(s => (int?) s.Plan.Seconds)
.Sum() ?? 0) * 100)
}).Where(w => w.SecondsPercentLeft <= 50).ToList();