【发布时间】:2010-10-31 08:58:27
【问题描述】:
我需要过滤一个 StaffingPositionsDataContract 类型的强类型列表,以及另一个过滤器名称和值列表。我有这两个列表:
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();
deserializedObject 有 2 个属性。 1:“名称”,2:“值”。这些属性需要能够过滤几个具有不同属性的不同类。如果当前正在过滤的 StaffingPositionsDataContract 是一个字符串,但不是 int、decimal 或 float,我有一个方法可以工作。以下是我使用的仅适用于字符串过滤器的内容。
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();
}
这是如何调用的:
var filteredPositions = staffingPositionResponse;
deserializedObject.ForEach(delegate(SerializedForm filters)
{
filteredPositions = _GetFilteredList<StaffingPositionsDataContract, string>(staffingPositionResponse, filters.name, new List<string> { filters.value });
});
任何人都知道我可以如何使用反序列化对象来过滤 staffingPositionResponse 类吗?
【问题讨论】:
-
(重新评论) - 你能举个例子说明你是如何称呼它的吗?价值观是什么?它适用于整数、字符串和浮点数...