为什么要将DataTable转动态对象?因为需求是从关系型数据库获取的数据结构不是固定的,是由用户输入的select语句决定的,所以没法事先创建好对象。
public bool PopulateData(DataTable result,string url,string port,string indexname,string typename)
{
ESHelper esHelper = new ESHelper(string.Format("http://{0}:{1}", url, port));
foreach (var item in result.Columns)
{
fieldList.Add(item.ToString());
}
List<System.Dynamic.ExpandoObject> lstObj = new List<System.Dynamic.ExpandoObject>();
dynamic dobj = null;
bool isSuccess = false;
foreach (DataRow item in result.Rows)
{
dobj = new System.Dynamic.ExpandoObject();
var dictionary = (IDictionary<string, object>)dobj;
foreach (var fieldItem in fieldList)
{
dictionary[fieldItem] = item[fieldItem];
}
lstObj.Add(dobj);
}
isSuccess = esHelper.BulkPopulateIndex(lstObj, indexname, typename);
return isSuccess;
}
/// <summary>
/// 批量导入
/// </summary>
/// <param name="meetupevent">要导入的动态对象列表</param>
/// <param name="strIndexName">索引名</param>
/// <param name="strDocType">类型名</param>
/// <returns>判断是否导入成功</returns>
public bool BulkPopulateIndex(List<System.Dynamic.ExpandoObject> meetupevent, string strIndexName, string strDocType)
{
BulkDescriptor des = new BulkDescriptor();
foreach (var item in meetupevent)
{
des.Index<System.Dynamic.ExpandoObject>(i => i.Index(strIndexName)
.Type(strDocType)
.Document(item));
}
var index = client.Bulk(des);
return index.IsValid;
}