Устранение избыточности между запросами LINQ - PullRequest
2 голосов
/ 15 апреля 2011

Мне нужно вызывать идентичные запросы 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 && set.application_id == id && (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" просто перечислены типы настроек по идентификаторам.Другие вызовы просто заменят это предложение «где» на большее или меньшее количество установочных идентификаторов, которые затем возвращаются в представление.Как я могу динамически заменить это предложение "где" или идентификаторы настроек?Могу ли я просто присвоить строку или массив списку настроек после второго «&&» (это, похоже, не работает)?Или Lambdas поможет здесь (я также не мог заставить это работать)?Спасибо!

Ответы [ 2 ]

2 голосов
/ 15 апреля 2011

Вы можете использовать массив в сочетании с запросом Contains():

var settingTypeIds = new[] { 81, 82, 83 };

return from a in _repository.GetApps()
..
where ent.ROW_ID == app 
      && set.application_id == id 
      && settingTypeIds.Contains(set.setting_type_id) 
0 голосов
/ 15 апреля 2011

Нужно ли использовать синтаксис запроса?Можете ли вы использовать методы расширения LINQ и передавать различные лямбда-выражения в метод Where?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...