2017-10-17 134 views
0

我在使用NEST客戶端進行源過濾時遇到問題。NEST過濾源並使用對象構造函數創建對象的實例

這是我的代碼示例:

var searchRequest = client.Search<Report>(analysisDescriptor 
    .Source(s => s 
    .Includes(i => i 
     .Fields(
     f => f.ReportId, 
     f => f.Abstract, 
     f => f.Title 
    ) 
    ) 
) 
    .Size(10)); 

哪裏analysisDescriptornew SearchDescriptor<Report>()與文本搜索業務邏輯。

這是我的類的構造函數:

public class Report 
{ 
    public Report(int reportId, string itemAbstract, string title) 
    { 
    Abstract = itemAbstract; 
    ReportId = reportId; 
    Title = title; 
    /* Other fields */ 
    } 

    public int ReportId { get; } 
    public string Abstract { get; } 
    public string Title { get; } 
    /* Other fields */ 
} 

現在的問題是,技術負責不希望有set性質,並希望有一個構造函數來代替。

上面的代碼幾乎作品:

  1. ReportId分配
  2. 標題分配

的問題是,Abstract場不分配,因爲構造函數有它宣佈爲itemAbstract。這已完成,因爲abstract是C#中的保留關鍵字。如果我將構造函數中的字段名稱更改爲@abstract - 這可行,但似乎不正確,因爲我必須使用保留關鍵字。

Abstract更改爲ItemAbstract似乎不是一種選擇,因爲我們在數據庫中擁有它,並且需要更多的更改。

所以理想情況下,我正在尋找一種方法將我的searchRequest中的Abstract字段傳遞給Report的構造函數,作爲itemAbstract。希望這是有道理的。

我接受任何其他解決方案的清潔和有意義。

回答

2

這應該工作,因爲NEST只是使用Json.net進行序列化。

public Report(int reportId,[JsonProperty("abstract")]string itemAbstract, string title) 
    { 
    Abstract = itemAbstract; 
    ReportId = reportId; 
    Title = title; 
    /* Other fields */ 
    } 
+0

工作就像一個魅力! –

相關問題