У меня есть несколько раскрывающихся списков, которые каскадно, но вместо того, чтобы параметры списка исключались из списка в соответствии с выбором пользователя, несвязанные параметры в списке отключены. Они все еще присутствуют в раскрывающемся списке, но они выделены серым цветом, пользователь не может их выбрать и они не будут включены в отправку.
Я выполняю это с помощью левого соединения между параметрами списка и подмножеством параметров списка, которые применимы к текущему выбору пользователя. Если член основного списка отсутствует в подмножестве, это вернет ноль, и я могу в этом случае предоставить логическое значение, которое указывает, будет ли эта опция отключена.
Предположим, у меня есть три каскадных выпадающих списка, привязанных к следующим трем таблицам: OptionA, OptionB и OptionC. vwOptionIndex - это представление, которое индексирует все комбинации OptionA, OptionB и OptionC, которые используются в настоящее время, обеспечивая тем самым применимое подмножество для каскадирования.
Если пользователь выбирает два значения в OptionB (123, 456) и одно значение в OptionC (789), то для возврата списка для OptionA я бы использовал следующий запрос SQL Server.
SELECT
a.ID,
a.Label,
CAST(
CASE
WHEN SUM(
CASE
WHEN x.OptionA_ID IS NULL
THEN 0
ELSE 1
END
) > 0
THEN 0
ELSE 1
END AS BIT
) AS [Disabled]
FROM dbo.OptionA AS a
LEFT OUTER JOIN dbo.vwOptionIndex AS x
ON a.ID = x.OptionA_ID
AND OptionB_ID IN (123, 456)
AND OptionC_ID IN (789)
GROUP BY a.ID, a.Label
Я пытаюсь представить этот запрос в LINQ. Я выяснил объединение, но я не смог выяснить, как представить часть запроса, которая возвращает бит, который сообщает, должна ли эта опция списка быть отключена.
from t1 in OptionAs
join t2 in VwOptionIndex
on new { t1.ID} equals new { t2.OptionA_ID } into j1
from j2 in j1.DefaultIfEmpty()
group j2 by new { t1.ID, t1.Label } into g
select new { g.Key.ID, g.Key.Label, Disabled = <???> }
Другими словами, мне нужен следующий бит логики в приведенном выше выражении запроса LINQ.
CAST( CASE WHEN SUM( CASE WHEN x.OptionA_ID IS NULL THEN 0 ELSE 1 END ) > 0 THEN 0 ELSE 1 END AS BIT ) AS [Disabled]
Любая помощь будет принята с благодарностью.
Спасибо!