如果嵌套列表包含来自另一个数组的值,我想返回对象的列表。 例如:
{
"ListOfMainObject": [
{
"Name": "Object1",
"NestedArray": [
"Value1",
"Value2"
]
},
{
"Name": "Object2",
"NestedArray": [
"Value1",
"Value3"
]
},
{
"Name": "Object3",
"NestedArray": [
"Value2",
"Value3"
]
}
]}
,如果我有一个数组,例如[“ Value1”],它应该返回Object1和Object2的列表。另外,如果我有数组[“ Value1”,“ Value2”],它应该只返回Object1,因为只有Object1包含这些值。
当前,我具有用于设置此查询的过滤器功能,但是如果我在数组中发送两个值,则此功能将排除在外:
private List<Func<QueryContainerDescriptor<Unit>, QueryContainer>> GetFacetFilters(IList<string> facets)
{
var filters = new List<Func<QueryContainerDescriptor<Unit>, QueryContainer>>();
if (facets == null)
{
return filters;
}
foreach (var facet in facets)
{
QueryContainer Filter(QueryContainerDescriptor<Unit> f) => f
.Bool(bo => bo
.Must(m => m.MatchPhrase(md => md.Field(new Field("facets.visible")).Query("true")))
.Should(s => s.MatchPhrase(md => md.Field(new Field("facets.alias")).Query(facet))));
filters.Add(Filter);
}
return filters;
}
'Unit'是主要对象,'Facets'是嵌套数组。
谢谢!
P.S。 .net弹性搜索
答案 0 :(得分:0)
您的示例数据似乎是一个JSON集合,但是您已经提供了c#和.net标记,因此我认为在某些时候您可以对一组c#对象进行操作。
使用LINQ,您可以返回MainObjects的子集,其NestedArray属性包含一个单独的Array的所有值,如下所示:
List<MainObject> mainObjectList = {...} // object collection
var requiredValues = {...} // e.g. ["Value1", "Value2"];
mainObjectList.Where(x => !requiredValues.Except(x.NestedArray).Any());