Как искать List <> с десериализованным объектом Json Generic - PullRequest
0 голосов
/ 03 июня 2009

Мне нужно отфильтровать общий список с данными из объекта Json. У меня есть десериализованный объект в списке с {name:'', value:''}. Мне нужно найти контракт данных (который также является списком) с именем в качестве поля для поиска и значением в качестве значения поля. Как мне сделать это, поскольку они являются общими. Вот метод:

public List<StaffingPositionsDataContract> GetStaffingPosition(string searchFilters)
{
    List<serializedForm> deserializedObject = JsonConvert.DeserializeObject<List<serializedForm>>(searchFilters);
    List<StaffingPositionsDataContract> staffingPositionResponse = new StaffingPositionsDataContract().LoadMockData();

    deserializedObject.ForEach(delegate(serializedForm filter) {


       });

    return staffingPositionResponse;
}

Я хотел попробовать что-то простое, как это:

var query = staffingPositionResponse .Where(filter.name + ".Contains(@0)", filter.value);

Но где нет, кроме 2 аргументов. Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 03 июня 2009

Спасибо миллион Питер! Вот что я выбрал для удовлетворения своих потребностей:

   private bool DoesContractMeetFilter(List<SerializedForm> filters, StaffingPositionsDataContract position)
    {   
        return filters.FindAll(delegate(SerializedForm filter)
        {
            return string.Equals(position.PositionId.ToString(), filter.value) && 
                string.Equals(position.Series, filter.value) &&
                string.Equals(position.OrgLocation,filter.value) &&
                string.Equals(position.DutyStation, filter.value) &&
                string.Equals(position.BudgetStatus, filter.value)&&
                string.Equals(position.BudgetingEntity, filter.value) &&
                string.Equals(position.BFY, filter.value);
        }).Where(x => x.value != "" || x.value != null || x.value.ToUpper() != "ALL").Count() > 0;
    }

Это прекрасно работает, но я был бы ОЧЕНЬ впечатлен, если бы мог глобализировать это, чтобы все мои другие контракты на данные могли его использовать!

0 голосов
/ 03 июня 2009

Почему бы не использовать что-то вроде

List<SerializedForm >.FindAll( delegate(SerializedForm filter)
{
   return filter.name.IndexOf(filter.value) != -1;
});
...