J'ai besoin de filtrer une liste fortement typée de type StaffingPositionsDataContract, avec une autre liste de noms et de valeurs de filtres. J'ai ces deux listes:Comment filtrer une liste fortement typée avec la liste <String> variables
List<SerializedForm> deserializedObject = JsonConvert.DeserializeObject<List<SerializedForm>>(searchFilters).Where(x => !string.IsNullOrEmpty(x.value) && !string.Equals(x.value.ToUpper(), "ALL")).ToList();
List<StaffingPositionsDataContract> staffingPositionResponse = new StaffingPositionsDataContract().LoadMockData();
L'objet deserialized a 2 propriétés. 1: "nom", 2: "valeur". Ces propriétés doivent être capables de filtrer plusieurs classes différentes avec des propriétés différentes. J'ai une méthode qui fonctionne si le StaffingPositionsDataContract en cours de filtrage est une chaîne, mais pas int ou decimal ou float. Voici ce que j'utilise qui fonctionne uniquement avec des filtres de chaîne.
private static List<T> _GetFilteredList<T, U>(IList<T> ListToFilter, string PropertyToFilterOn, List<U> FilterValues)
{
ParameterExpression p = Expression.Parameter(typeof(T), "x");
Func<T, U> select = Expression.Lambda<Func<T, U>>(
Expression.Property(p, PropertyToFilterOn), p).Compile();
return ListToFilter.Join(FilterValues, select, u => u, (t, u) => t).ToList();
}
Voici comment cela se fait appeler:
var filteredPositions = staffingPositionResponse;
deserializedObject.ForEach(delegate(SerializedForm filters)
{
filteredPositions = _GetFilteredList<StaffingPositionsDataContract, string>(staffingPositionResponse, filters.name, new List<string> { filters.value });
});
Quelqu'un sait comment je peux filtrer la classe staffingPositionResponse avec les objets deserializedObject?
(commentaire) - pouvez-vous donner un exemple de comment vous l'appelez? Quelles sont les valeurs? Cela a fonctionné pour moi avec des ints, des ficelles et des flotteurs ... –