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