Удаление повторений между запросами LINQ

#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. Возможно, но я не уверен, как это будет работать. Я все же рассмотрю это. Спасибо!