/// <summary> /// 获取平均值 /// </summary> /// <param name="thisValue"></param> /// <param name="count"></param> /// <returns></returns> public static double Avg(this TaskableWithCount <double> thisValue) { var count = thisValue.Tasks.Select(it => it.Result.Count).Sum(); if (count == 0) { return(0); } var reval = thisValue.Tasks.Select(it => it.Result.Value * it.Result.Count).Sum() / count; return(reval); }
/// <summary> /// 多线程请求所有数据库节点,同步汇总结果 /// </summary> /// <typeparam name="T">支持DataTable、实体类和值类型</typeparam> /// <param name="sqlSelect">sql from之前(例如: "select count(*)" )</param> /// <param name="sqlEnd">sql from之后(例如: "from table where id=1" </param> /// <param name="whereObj">参数 例如: new { id="1",name="张三"}</param> /// <returns></returns> public TaskableWithCount <T> TaskableWithCount <T>(string sqlSelect, string sqlEnd, object whereObj = null) { TaskableWithCount <T> reval = new TaskableWithCount <T>(); reval.Sql = sqlSelect + sqlEnd; reval.WhereObj = whereObj; var tasks = new Task <CloudSearchResult <T> > [configList.Count]; for (int i = 0; i < tasks.Length; i++) { CloudPubMethod.TaskFactory <CloudSearchResult <T> >(ti => { var connString = configList[ti].ConnectionString; var db = new SqlSugarClient(connString); SettingConnection(db); CloudSearchResult <T> itemReval = new CloudSearchResult <T>(); var isDataTable = typeof(T) == typeof(DataTable); var isClass = typeof(T).IsClass; if (isClass) { itemReval.Entities = db.SqlQuery <T>(reval.Sql, whereObj); } else if (isDataTable) { itemReval.DataTable = db.GetDataTable(reval.Sql, whereObj); } else { var obj = db.GetScalar(reval.Sql, whereObj); obj = Convert.ChangeType(obj, typeof(T)); itemReval.Value = (T)obj; } itemReval.Count = db.GetInt("SELECT COUNT(1)" + sqlEnd);; itemReval.ConnectionString = connString; return(itemReval); }, tasks, i); } Task.WaitAll(tasks); reval.Tasks = tasks; return(reval); }