Это боль, но вы можете сделать:
select t.col, left(v.dogv, charindex('''', v.dogv) - 1)
from (values ('random text dog ''123'' more random text')) t(col) cross apply
(values (stuff(col, 1, charindex('dog', col) + 4, ''))
) v(dogv)
where col like '%dog%';
Если те SelectLists абсолютно равны, то я, несомненно, лучше буду использовать один список для нескольких DropDownLists.
Будьте похожи на его общее использование. Я использую аналогичный подход также, но думаю собирающийся порт некоторые средства управления к HTML. RenderAction, потому что прохождение через ViewData страницы для управления не чувствует себя хорошо для меня также. Да, я знаю, что это не будет чистый MVC :)
Если Ваш ORM поддерживает кэш, конечно, используйте его.
Но также и если Ваш проект не является маленьким, и Вы думаете, что он продолжит расти, я рекомендую реализовать Уровень служб (шаблон PoEAA) выше Ваших репозиториев, которые будут содержать бизнес-логику и логику управления кэшем также.
Если Вы хотите управлять своим кэшем прозрачно, не влияя на Ваш dal или mvc слой, я думаю, что лучший approache должен использовать AOP.
Один способ сделать это состоит в том, чтобы поместить данные, в которых Вы нуждаетесь для списка выборки в Вашей модели через введенное представление. Представление может выполнить итерации по данным в модели для генерации любых списков выборки, в которых это нуждается. Можно также наполнить объект непосредственно в набор ViewData, но я думаю, имея введенные результаты представления в намного более чистом коде.