Объедините делегатов с оператором ИЛИ - PullRequest
4 голосов
/ 28 сентября 2011

Поиск значений в двух разных таблицах с помощью LinqToSQL и объединение результатов на основе того, что найдено в каком наборе результатов.

Как мне объединить два Funcs в зависимости от заданных условий:

 // a filter for a LinqToSQL query:
 Func<ComputerDetail, bool> filter;

 // declare the default filter
 filter = x => x.ComputerName.Contains(searchTerm);

затем если условие выполнено , он хотел бы добавить лямбду, указанную ниже:

 x => computernames.Contains(x.ComputerName)

так что это приведет к:

 x => computernames.Contains(x.ComputerName)) ||
      x.ComputerName.Contains(searchTerm);

Создание делегата многоадресной рассылки с оператором «плюс», кажется, почти делает это, однако я не уверен, как применить ИЛИ (||) в этом случае:

 filter += computernames.Contains(x.ComputerName) 

примечание: computernames - это List<String>, ComputerName - это свойство ComputerDetail, которое представляет собой класс, представляющий представление в LinqToSQL

1 Ответ

2 голосов
/ 28 сентября 2011

Если это LINQ to SQL, вы не хотите объединять два делегата - вы хотите объединить два дерева выражений . В противном случае вся ваша фильтрация будет выполняться на стороне клиента.

Если это так, я полагаю, что вам просто нужно PredicateBuilder - используйте predicate1.Or(predicate2) для объединения двух предикатов.

Если вы действительно хотите получить форму делегата, вы можете взять тот же код и просто изменить все подписи, чтобы использовать делегаты вместо деревьев выражений.

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