Есть ли способ параметризовать содержащуюся часть Linq при подключении к массиву

#c# #linq

Вопрос:

Существует ли способ параметризации части Linq «Содержит» при связывании с массивом.

У меня есть следующий код.

 var query = Data.Where(s => an_array.Contains(s.Name)).Distinct().ToList();
 

Как я могу параметризовать s.Name таким образом, я могу создать метод, который использует функцию или что-то еще?

Я привык использовать (параметр Func<Модель, T>) и использовать его в linq, где входные данные выглядят так (s=<Модель, T>>s.Name), но я застрял, потому что содержащаяся часть просто ищет (s.Name)

Я пробовал использовать (Функция<Модель, строка> параметр ), но это кажется неправильным.

Спасибо!

Обновление 1:

Если у меня есть метод, подобный приведенному ниже, где s.Name изменяется в зависимости от ввода пользователем. Как я могу передать это методу.

 public void GetFilteredItems()
{
 var queryresult = Data.Where(s => an_array.Contains(s.Name)).Distinct().ToList();
}
 

В идеале хотелось бы чего-то подобного, чтобы это работало со всем, что передается.

 public void GetFilteredItems(Func<?,?> param)
{
 var queryresult = Data.Where(s => an_array.Contains(param)).Distinct().ToList();
}
 

Комментарии:

1. Как вы пробовали использовать Func<Model, T> параметр? Я бы ожидал var query = Data.Where(s => an_array.Contains(param(s))).Distinct().ToList() , что буду работать.

2. Попробуйте использовать Any() вместо Contains().

Ответ №1:

Это то, чего ты хочешь?

 Func<Model, string> p = s => s.Name;

var query = Data.Where(s => an_array.Contains(p(s))).Distinct().ToList();
 

Ответ №2:

Я думаю , что ты хочешь этого Any , а не Contains этого . Одна из перегрузок принимает предикат, который вы можете использовать для проверки определенного состояния:

 public void GetFilteredItems<T>(Func<T, bool> predicate)
{
    var queryresult = Data.Where(s => an_array.Any(predicate)).Distinct().ToList();
}