#linq #c#-4.0
#linq #c #-4.0
Вопрос:
Мне нужно несколько раз вызывать идентичные запросы LINQ, которые имеют разные элементы только в предложении «where». Вместо того, чтобы повторять запрос LINQ снова и снова, я хотел бы вместо этого передать элементы в один запрос, но я не понимаю, как это сделать.
Прямо сейчас мой базовый запрос LINQ выглядит следующим образом:
return from a in _repository.GetApps()
join set in _repository.GetSettings() on a.id equals set.application_id
join type in _repository.GetSettingsTypes() on set.setting_type_id equals type.id
join ent in _repository.GetEntities() on a.entity_id equals ent.id
where ent.ROW_ID == app amp;amp; set.application_id == id amp;amp; (set.setting_type_id==81 || set.setting_type_id==82 || set.setting_type_id==83)
orderby set.application_id, type.ordinal
select new Settings { app_name = a.name, data_type = type.data_type, setting_name = type.name, setting_description = type.description, setting_value = set.setting_value, entity_name = ent.name, entity_num = ent.ROW_ID };
В предложении «where» просто перечислены типы настроек по идентификаторам. Другие вызовы просто заменят это предложение «where» на большее или меньшее количество идентификаторов настроек, которые затем будут возвращены в представление. Как я могу динамически заменить это предложение «where» или идентификаторы настроек? Могу ли я просто назначить строку или массив в список настроек после второго «amp;amp;» (похоже, это не сработало)? Или здесь помогли бы лямбды (я также не смог заставить это работать)? Спасибо!
Ответ №1:
Вы можете использовать массив в сочетании с Contains()
запросом:
var settingTypeIds = new[] { 81, 82, 83 };
return from a in _repository.GetApps()
..
where ent.ROW_ID == app
amp;amp; set.application_id == id
amp;amp; settingTypeIds.Contains(set.setting_type_id)
Комментарии:
1. Это выглядит чрезвычайно многообещающе. Я попробую. Спасибо!
Ответ №2:
Обязательно ли использовать синтаксис запроса? Можете ли вы использовать методы расширения LINQ и передавать различные лямбда-выражения в метод Where?
Комментарии:
1. Возможно, но я не уверен, как это будет работать. Я все же рассмотрю это. Спасибо!