Как связать результат NEST в Gridview или DataTable - PullRequest
0 голосов
/ 10 мая 2019

Мне нужно привязать результат поиска из NEST (ElasticSearch) к Gridview в ASP.NET (Webform).

Код Я получаю результат от ElasticSearch от использования NEST:

public class Address
{
    public int SN { get; set; }
    public string JLN { get; set; }
}

protected void BtnSearch_Clicked(object sender, EventArgs e)
{
    string SearchValue = txtSearchValue.Text;
    string es_host = System.Configuration.ConfigurationManager.AppSettings["cnStringIP"];
    string es_port = System.Configuration.ConfigurationManager.AppSettings["cnStringPort"];
    string es_index = System.Configuration.ConfigurationManager.AppSettings["cnStringIndex"];

    var settings = new ConnectionSettings(new Uri("http://" + es_host + ":" + es_port + ""))
        .DefaultIndex("masterlist*");

    var client = new ElasticClient(settings);

    var searchResponse = client.Search<Address>(s => s
            .Index("masterlist*")
            .From(0)
            .Size(10)
            .Query(q => q
                 .QueryString(qs => qs
                    .Query("JLN:\""+ SearchValue +"\"")
                )
            )
        );

    var address = searchResponse.Documents.ToList();

    ESGridview.DataSource = address;
    ESGridview.DataBind();
}

С помощью этого кода gridview может автоматически генерировать два поля правильного заголовка - «SN» и «JLN», и он может автоматически генерировать 10 строк (я ограничиваю размер до 10 строк в синтаксисе поиска), но это пустые данные в столбце.

Я вижу, что в других статьях упоминается, что мне нужно сначала связать searchResponse.Documents.Tolist() с DataTable, и я попробовал метод с кодом ниже:

DataTable dt = new DataTable();
dt.Columns.Add("Field1", typeof(int));
dt.Columns.Add("Field2", typeof(string));

foreach (IHit<JObject> x in address)
{
    dt.Rows.Add(
        x.Fields.FieldValuesDictionary["Prop1"] as JArray,
        x.Fields.FieldValuesDictionary["Prop2"] as JArray
    );
}

Но я получаю сообщение об ошибке FieldValuesDictionary:

FieldValues ​​не содержит определения для «FieldValuesDictionary», и нет доступного метода расширения «FieldValuesDictionary», принимающего первый аргумент типа «FieldValues» (вы пропустили директиву using или ссылку на сборку?

...