/// <summary> /// 取得要引用的排序選項 /// </summary> /// <param name="AOptionName">排序選項名稱</param> /// <returns>排序欄位內容</returns> public virtual string getOptionOrderBy(string AOptionName) { if (OrderByDictionary.ContainsKey(AOptionName)) { return((string)OrderByDictionary[AOptionName]); } else { return(""); } }
/// <summary> /// 排序 /// </summary> /// <param name="list"></param> /// <param name="orderByTypes"></param> /// <param name="orderByUnqueField"></param> /// <returns></returns> public static List <DataRow> OrderByDataRow(this IEnumerable <DataRow> list, List <OrderByDictionary> orderByTypes, OrderByDictionary orderByUnqueField) { orderByTypes.Add(orderByUnqueField); var dt = list.AsEnumerable().CopyToDataTable(); var guidType = typeof(Guid); var sqlGuidType = typeof(SqlGuid); System.Data.DataTable dtByConvertGuidToSqlGuid = new System.Data.DataTable(); foreach (DataColumn it in dt.Columns) { var isGuid = it.DataType == guidType; if (isGuid) { dtByConvertGuidToSqlGuid.Columns.Add(it.ColumnName, sqlGuidType); } else { dtByConvertGuidToSqlGuid.Columns.Add(it.ColumnName, it.DataType); } } //将dataTable中guid换转成sqlguid,这样排序才会和SQL一致 dtByConvertGuidToSqlGuid.Load(dt.CreateDataReader(), System.Data.LoadOption.OverwriteChanges); var view = dtByConvertGuidToSqlGuid.AsDataView(); view.Sort = string.Join(",", orderByTypes.Select(it => string.Format(" {0} {1} ", it.OrderByField, it.IsAsc ? "ASC" : "DESC"))); var reval = view.ToTable().AsEnumerable().ToList(); orderByTypes.Remove(orderByUnqueField); return(reval); }