У меня есть несколько каскадных раскрывающихся списков, но вместо того, чтобы параметры списка были исключены из списка в соответствии с выбором пользователя, несвязанные параметры в списке отключены. Они все еще присутствуют в раскрывающемся списке, но выделены серым цветом, пользователь не может их выбрать, и они не будут включены в отправку.
Я добиваюсь этого с помощью левого соединения между параметрами списка и подмножеством параметров списка, которые применимы к текущему выбору пользователя. Если член основного списка отсутствует в подмножестве, он вернет null, и я могу указать это, чтобы предоставить логическое значение, которое указывает, будет ли отключена эта опция.
Предположим, у меня есть три каскадных раскрывающихся списка, привязанных к следующим трем таблицам: 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]
Любая помощь будет принята с благодарностью.
Спасибо!