[英]NEST won't allow me to add a func parameter
好的,我有一個奇怪的問題,我不確定是否只是因為它們是 funcs 並且 funcs 對我來說很新(func 的整個想法讓我有點惱火)。
我需要兩次調用完全相同的查詢,因為我需要 2 個圖形/數據集。 每個參數一個。 因為我不想重復我的查詢,所以我在我的類中添加了一個 func 參數,所以我可以強類型地選擇我的類上的正確屬性。
SearchDescriptor<Stats> Query(SearchDescriptor<Stats> qc, Func<Stats, double> field)
{
var query = qc
.Aggregations(aggs => aggs
.DateHistogram("histogram", d => d
.Field(f => f.Timestamp)
.FixedInterval("30m")
.MinimumDocumentCount(1)
.Aggregations(childAggs => childAggs
.Average("3", f => f
.Field(fi => field(fi))
)
)
)
)
.Query(q =>
q.Bool(b =>
b.Filter(
f => f.MatchPhrase(mp => mp
.Field(fi => fi.Name)
.Query(name)
),
f => f.DateRange(r => r
.Field(fi => fi.Timestamp)
.GreaterThanOrEquals(DateTime.UtcNow.AddDays(-1))
.LessThanOrEquals(DateTime.UtcNow)
)
)
)
);
return query;
}
var cpu = await GetByScrolling<Stats>(client, qc => Query(qc, fi => fi.CpuPercent));
var memory = await GetByScrolling<Stats>(client, qc => Query(qc, fi => fi.MemoryUsage));
這可以編譯並且應該可以工作,但不幸的是生成的 JSON 是這樣的:
"aggs": {
"3": {
"avg": {
"field": "field"
}
}
}
如您所見,值為field
,這絕對是錯誤的。 這就像 NEST 的內部部分對存在的任何參數執行某種.ToString()
操作,這就是為什么它返回field
而不是我放在 func 中的內容。
知道這是否應該是這樣的? 所述aggs
在我的JSON也對應於.Aggregations(aggs => aggs
拉姆達命名。
啊,正如我所說,我是 funcs 和Expression
新手,事實證明這正是我所需要的。 它實際上並不評估 func - 我需要給它一個表達式。
SearchDescriptor<Stats> Query(SearchDescriptor<Stats> qc, Expression<Func<Stats, double>> field)
{
......
}
然后給它表達式:
.Average("3", f => f
.Field(field)
)
然后它會對其進行評估並完美運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.