#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();
}