Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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
.net 如何在对象数组中执行嵌套查询_.net_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Nest - Fatal编程技术网 elasticsearch,nest,.net,elasticsearch,Nest" /> elasticsearch,nest,.net,elasticsearch,Nest" />

.net 如何在对象数组中执行嵌套查询

.net 如何在对象数组中执行嵌套查询,.net,elasticsearch,nest,.net,elasticsearch,Nest,我有一个带有嵌套对象数组的简单对象 public class Product { public Guid Id { get; set; } = Guid.NewGuid(); public string Name { get; set; } public ProductTag[] Tags {get; set;} = new ProductTag[0]; } public class ProductTag { public string TagName {get

我有一个带有嵌套对象数组的简单对象

public class Product {
    public Guid Id { get; set; } = Guid.NewGuid();
    public string Name { get; set; }
    public ProductTag[] Tags {get; set;} = new ProductTag[0];

}
public class ProductTag {
    public string TagName {get; set;}
    public string Color {get; set;} = "orange";
}
其中
标记
正在使用


由于嵌套的
Nested
似乎没有设置要查询的另一种类型,我对如何进行此查询有点不知所措。

试试mqd.Tags.First().TagName,“adminal”

试试mqd.Tags.First().TagName,“adminal”

下面就可以了

client.Search<Product>(s => s
    .Query(q => q
        .Nested(nqd => nqd
            .Path(x => x.Tags)
            .Query(qcd => qcd
                .Match(mqd => mqd
                    .Field(f => f.Tags.First().TagName)
                    .Query("orange")
                )
            )
        )
    )
);
获取字段名称的lambda表达式就是一个表达式。NEST知道,在此上下文中,LINQ方法
.First()
是要遍历到目标字段的表达式的一部分。你也可以使用任何

f => f.Tags[0].TagName
f => f.Tags.Last().TagName
f => f.Tags.Single().TagName
f => f.Tags.ElementAt(0).TagName
f => f.Tags.Max().TagName

或任何其他LINQ表达式,该表达式将返回可访问其属性的
ProductTag
,并表示
MemberExpression
,下面将执行此操作

client.Search<Product>(s => s
    .Query(q => q
        .Nested(nqd => nqd
            .Path(x => x.Tags)
            .Query(qcd => qcd
                .Match(mqd => mqd
                    .Field(f => f.Tags.First().TagName)
                    .Query("orange")
                )
            )
        )
    )
);
获取字段名称的lambda表达式就是一个表达式。NEST知道,在此上下文中,LINQ方法
.First()
是要遍历到目标字段的表达式的一部分。你也可以使用任何

f => f.Tags[0].TagName
f => f.Tags.Last().TagName
f => f.Tags.Single().TagName
f => f.Tags.ElementAt(0).TagName
f => f.Tags.Max().TagName

或任何其他LINQ表达式,该表达式将返回一个
ProductTag
,可在其上访问属性,并表示一个
MemberExpression

,请尝试mqd.Tags.TagName,“orange”@sramalingam24这是使用嵌套闭包模式的c#,因此它是强类型的。这不会让CompileOps忘记了一个.First()。请参见此处的类似示例@sramalingam24 yes!就是这样(也就是
.Field(“tags.tagName”).Query(“admiral”)
似乎起作用了-直到我读了他们关于如何使用隐式转换运算符的文档,我才想尝试它。想从您的响应中得出一个答案并将其标记为正确吗?很高兴您发现它有用,Thanksry mqd.tags.tagName,“橙色”@sramalingam24这是c#使用嵌套的闭包模式,因此它是强类型的。这不会让编译操作忘记那里的.First()。请参阅这里的一个类似示例@sramalingam24 yes!它做到了(也只是
.Field(“tags.tagName”).Query(“adminal”)
似乎有效-在阅读他们关于如何使用隐式转换运算符的文档之前,我没有想过要尝试它。想从您的回答中得出答案,我会将其标记为正确吗?很高兴您发现它很有用,谢谢
f => f.Tags[0].TagName
f => f.Tags.Last().TagName
f => f.Tags.Single().TagName
f => f.Tags.ElementAt(0).TagName
f => f.Tags.Max().TagName