将从关系型数据库获取到的数据DataTable转动态对象,导入到Elasticsearch中

为什么要将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;
        }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值