У меня есть 3 таблицы: Principal (Principal_ID, Scale), Frequency (Frequency_ID, Value) и Visit (Visit_ID, Principal_ID, Frequency_ID). мне нужен запрос, который возвращает все принципал (в главной таблице), и для каждой записи, запрашивать необходимую емкость для этого принципала, рассчитанную, как показано ниже:Задача сложного запроса LINQ to SQL
Capacity = (Principal.Scale == 0 ? 0 : (Frequency.Value == 1 ? 1 : Frequency.Value * 1.8)/Principal.Scale)
Я использую LINQ для 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.
И идеи, как решить это, если возможно, в одном запросе?
спасибо, что заблаговременно!
Загрузка его в типизированных DataSet это не вариант, я должен был бы полностью переписать большую часть программы. Я рассмотрю функции агрегации SQL CLR, спасибо. – ShdNx