1. 程式人生 > >關於DataTable欄位列求平均值,最大值,最小值,統計和的東東,為Null情況

關於DataTable欄位列求平均值,最大值,最小值,統計和的東東,為Null情況

//name是列名,前面用@是絕對字元。這句話表,在EndDataS裡面選擇Cell為DBNull資料型別的行--也就是NUll的說法(因為table和資料庫裡面儲存的null是不一樣的格式)。
                        if (drs.Length > 0)
                        {
                            double fnub = EndDataS.AsEnumerable().Sum(Q => Q[name] == DBNull.Value ? 0 : Convert.ToDouble(Q[name]));//求和可以把NUll轉換成0求和,後面不影響求平均值。
                            dr[Index] = Math.Round(fnub / (EndDataS.Rows.Count - drs.Length), 2);//這裡求平均值,前面為NUll是加的0,這裡減去為Null行數,就是列的平均值了。
                        }
                        else
                        {
                            dr[Index] = Math.Round(EndDataS.AsEnumerable().Average(Q => Q[name] == DBNull.Value ? 0 : Convert.ToDouble(Q[name])), 2); break;
                        }
                        break;                
                    case 2: dr[Index] = EndDataS.AsEnumerable().Max(Q => Q[name] == DBNull.Value ? -88888 : Convert.ToDouble(Q[name])); break;//這裡為Null的可以設定為一個比較小的數,那麼取出來的最大值,可以有一定保證。
                    case 3: dr[Index] = EndDataS.AsEnumerable().Min(Q => Q[name] == DBNull.Value ? 88888 : Convert.ToDouble(Q[name])); break;//這裡為NUll的可以設定為一個比較大的數,取出最小值,可以有一定的保證。
                    case 4: dr[Index] = EndDataS.AsEnumerable().Count(Q => Q[name] != DBNull.Value); break;//這裡可以取出不為Null的cell的行數Of某列。
                    default: break;
                }