.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