Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq 如何搜索列表<&燃气轮机;使用Json泛型反序列化对象_Linq_Json_.net 3.5 - Fatal编程技术网

Linq 如何搜索列表<&燃气轮机;使用Json泛型反序列化对象

Linq 如何搜索列表<&燃气轮机;使用Json泛型反序列化对象,linq,json,.net-3.5,Linq,Json,.net 3.5,我需要用Json对象中的数据过滤一个通用列表。我将反序列化对象放在一个列表中,该列表具有{name:'',value:''}。我需要搜索一个数据契约(它也是一个列表),其中name作为要搜索的字段,value作为字段的值。我如何完成这些,因为它们是通用的。 方法如下: public List<StaffingPositionsDataContract> GetStaffingPosition(string searchFilters) { List<serialized

我需要用Json对象中的数据过滤一个通用列表。我将反序列化对象放在一个列表中,该列表具有
{name:'',value:''}
。我需要搜索一个数据契约(它也是一个列表),其中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;
}

但是除了2个参数之外,Where没有其他参数。提前谢谢

为什么不使用类似

List<SerializedForm >.FindAll( delegate(SerializedForm filter)
{
   return filter.name.IndexOf(filter.value) != -1;
});
List.FindAll(委托(SerializedForm筛选器)
{
返回filter.name.IndexOf(filter.value)!=-1;
});

非常感谢彼得!以下是我为满足我的需要而得到的:

   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;
    }

private bool DoesContractMeetFilter(列表过滤器、StaffingPositionsDataContract位置)
{   
返回filters.FindAll(委托(SerializedForm筛选器)
{
返回字符串.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);
})。其中(x=>x.value!=“”| | x.value!=null | | x.value.ToUpper()!=“ALL”).Count()>0;
}

这非常有效,但如果我能将其全球化,使我的所有其他数据契约都能使用它,我会印象深刻

哦,应该是反序列化的dobject.findallth看起来不错,但我如何将其与我的其他列表联系起来呢。或者如何使用这些值筛选数据契约列表?FindAll方法是一种筛选方法,它返回一个新列表,其中包含第一个列表中的项目子集。因此,如果您想筛选staffingPositionResponse,可以调用List filteredList=staffingPositionResponse.FindAll(委托(StaffingPositionsDataContract position){return DoesContractMeetFilter(反序列化对象,位置);});private bool DoesContractMeetFilter(列表筛选器,StaffingPositionsDataContract position){return filters.FindAll(委托(序列化格式筛选器){return position.name.IndexOf(filter.value)!=-1;}.Count>0;}是的,我知道您在做什么,但该位置不包含名称的定义,筛选器包含名称。因此,如果我将position.name切换为filter.name,它不会过滤任何内容。问题是StaffingPositionsDataContract有7个要筛选的数据成员,但json对象不匹配。这就是为什么这么困难的原因,但是使用anwser,这将是一段非常好的代码。如果您的所有其他契约都使用公共基类或接口,那么只需将该方法移动到静态类,然后将基类或接口作为参数传递,而不是人员配置位置数据契约。这些类不共享基类,或者一个接口。我可以将它们更改为那样,但是由于每个类的所有属性都完全不同,因此我不确定在没有switch语句的情况下如何使用它。
   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;
    }