У меня есть 3 таблицы: Принципал (Principal_ID, Scale), Частота (Frequency_ID, Value) и Посещение (Visit_ID, Principal_ID, Frequency_ID).
Мне нужен запрос, который возвращает все принципалы (в таблице принципалов), и для каждой записи запрашивает емкость, необходимую для этого принципала, рассчитанную следующим образом:
Capacity = (Principal.Scale == 0 ? 0 : (Frequency.Value == 1 ? 1 : Frequency.Value * 1.8) / Principal.Scale)
Я использую LINQ to SQL, поэтому вот запрос:
from Principal p in ShopManagerDataContext.Instance.Principals
let cap =
(
from Visit v in p.Visits
let fqv = v.Frequency.Value
select (p.Scale != 0 ? ((fqv == 1.0f ? fqv : fqv * 1.8f) / p.Scale) : 0)
).Sum()
select new
{
p,
Capacity = cap
};
Сгенерированный TSQL:
SELECT [t0].[Principal_ID], [t0].[Name], [t0].[Scale], (
SELECT SUM(
(CASE
WHEN [t0].[Scale] <> @p0 THEN (
(CASE
WHEN [t2].[Value] = @p1 THEN [t2].[Value]
ELSE [t2].[Value] * @p2
END)) / (CONVERT(Real,[t0].[Scale]))
ELSE @p3
END))
FROM [Visit] AS [t1]
INNER JOIN [Frequency] AS [t2] ON [t2].[Frequency_ID] = [t1].[Frequency_ID]
WHERE [t1].[Principal_ID] = [t0].[Principal_ID]
) AS [Capacity]
FROM [Principal] AS [t0]
И получаю ошибку:
SqlException: Multiple columns are specified in an aggregated expression containing an outer reference. If an expression being aggregated contains an outer reference, then that outer reference must be the only column referenced in the expression.
А идеи как решить это, если возможно, одним запросом?
Большое спасибо заранее!