如何将NEST结果绑定到Gridview或DataTable

时间:2019-05-10 20:02:48

标签: c# asp.net nest

我需要将NEST(ElasticSearch)的搜索结果绑定到ASP.NET(Webform)中的Gridview

代码,我使用NEST从ElasticSearch中得到结果:

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指令或程序集引用?

0 个答案:

没有答案