public DataRationalityMessage Execute()
        {
            DataRationalityMessage retMsg = new DataRationalityMessage();

            // 取得所有學生資料
            Dictionary<string,StudentRecord> studIDDict = new Dictionary<string,StudentRecord> ();
            List<StudentRecord> studRecList = Student.SelectAll();
            foreach (StudentRecord stud in studRecList)
                studIDDict.Add(stud.ID, stud);

            // 取得學生自訂欄位資料
            List<UserDefineData.DAL.UserDefData> UserDefDataList = UDTTransfer.GetDataFromUDT(studIDDict.Keys.ToList());

            // 檢查資料並組合
            Dictionary<string, Dictionary<string, List<UserDefineData.DAL.UserDefData>>> dataDict = new Dictionary<string, Dictionary<string, List<DAL.UserDefData>>>();

            foreach (UserDefineData.DAL.UserDefData data in UserDefDataList)
            {
                if (!dataDict.ContainsKey(data.RefID))
                    dataDict.Add(data.RefID, new Dictionary<string,List<DAL.UserDefData>>());

                if (!dataDict[data.RefID].ContainsKey(data.FieldName))
                    dataDict[data.RefID].Add(data.FieldName, new List<DAL.UserDefData>());

                dataDict[data.RefID][data.FieldName].Add(data);
            }

            CorrectableRecs.Clear();
            RATRecs.Clear();
            try
            {
                foreach (string sid in dataDict.Keys)
                {
                    Dictionary<string, List<UserDefineData.DAL.UserDefData>> dataA = dataDict[sid];
                    foreach (List<UserDefineData.DAL.UserDefData> data in dataA.Values)
                    {
                        // 有重複
                        if (data.Count > 1)
                        {
                            foreach (UserDefineData.DAL.UserDefData data1 in data)
                            {
                                DoubleUserDefDataRATRec rec = new DoubleUserDefDataRATRec();
                                rec.UID = data1.UID;
                                rec.學生系統編號 = data1.RefID;
                                rec.欄位名稱 = data1.FieldName;
                                rec.值 = data1.Value;
                                if (studIDDict.ContainsKey(data1.RefID))
                                {
                                    rec.身分證號 = studIDDict[data1.RefID].IDNumber;
                                    rec.姓名 = studIDDict[data1.RefID].Name;
                                    rec.狀態 = studIDDict[data1.RefID].Status.ToString();
                                    rec.學號 = studIDDict[data1.RefID].StudentNumber;
                                    if (studIDDict[data1.RefID].SeatNo.HasValue)
                                        rec.座號 = studIDDict[data1.RefID].SeatNo.Value.ToString();
                                    else
                                        rec.座號 = "";

                                    if (studIDDict[data1.RefID].Class != null)
                                        rec.班級 = studIDDict[data1.RefID].Class.Name;
                                    else
                                        rec.班級 = "";
                                }

                                RATRecs.Add(rec);
                                CorrectableRecs.Add(data1);
                            }
                        }
                    }
                }

            }
            catch (Exception ex)
            {
                retMsg.Message = ex.Message;

                return retMsg;
            }

            StringBuilder strBuilder = new StringBuilder();

            strBuilder.AppendLine("檢查學生自訂欄位資料筆數:" + UserDefDataList.Count);
            strBuilder.AppendLine("自訂欄位資料有重複筆數:" + RATRecs.Count);

            var SortedRATRecords = from RATRecord in RATRecs orderby RATRecord.狀態, RATRecord.班級, K12.Data.Int.ParseAllowNull(RATRecord.座號), RATRecord.欄位名稱, RATRecord.值 select RATRecord;

            retMsg.Message = strBuilder.ToString();
            retMsg.Data = SortedRATRecords.ToList();

            return retMsg;
        }
        public DataRationalityMessage Execute()
        {
            DataRationalityMessage retMsg = new DataRationalityMessage();

            // 取得所有學生資料
            Dictionary <string, StudentRecord> studIDDict = new Dictionary <string, StudentRecord> ();
            List <StudentRecord> studRecList = Student.SelectAll();

            foreach (StudentRecord stud in studRecList)
            {
                studIDDict.Add(stud.ID, stud);
            }

            // 取得學生自訂欄位資料
            List <UserDefineData.DAL.UserDefData> UserDefDataList = UDTTransfer.GetDataFromUDT(studIDDict.Keys.ToList());

            // 檢查資料並組合
            Dictionary <string, Dictionary <string, List <UserDefineData.DAL.UserDefData> > > dataDict = new Dictionary <string, Dictionary <string, List <DAL.UserDefData> > >();

            foreach (UserDefineData.DAL.UserDefData data in UserDefDataList)
            {
                if (!dataDict.ContainsKey(data.RefID))
                {
                    dataDict.Add(data.RefID, new Dictionary <string, List <DAL.UserDefData> >());
                }

                if (!dataDict[data.RefID].ContainsKey(data.FieldName))
                {
                    dataDict[data.RefID].Add(data.FieldName, new List <DAL.UserDefData>());
                }

                dataDict[data.RefID][data.FieldName].Add(data);
            }

            CorrectableRecs.Clear();
            RATRecs.Clear();
            try
            {
                foreach (string sid in dataDict.Keys)
                {
                    Dictionary <string, List <UserDefineData.DAL.UserDefData> > dataA = dataDict[sid];
                    foreach (List <UserDefineData.DAL.UserDefData> data in dataA.Values)
                    {
                        // 有重複
                        if (data.Count > 1)
                        {
                            foreach (UserDefineData.DAL.UserDefData data1 in data)
                            {
                                DoubleUserDefDataRATRec rec = new DoubleUserDefDataRATRec();
                                rec.UID    = data1.UID;
                                rec.學生系統編號 = data1.RefID;
                                rec.欄位名稱   = data1.FieldName;
                                rec.值      = data1.Value;
                                if (studIDDict.ContainsKey(data1.RefID))
                                {
                                    rec.身分證號 = studIDDict[data1.RefID].IDNumber;
                                    rec.姓名   = studIDDict[data1.RefID].Name;
                                    rec.狀態   = studIDDict[data1.RefID].Status.ToString();
                                    rec.學號   = studIDDict[data1.RefID].StudentNumber;
                                    if (studIDDict[data1.RefID].SeatNo.HasValue)
                                    {
                                        rec.座號 = studIDDict[data1.RefID].SeatNo.Value.ToString();
                                    }
                                    else
                                    {
                                        rec.座號 = "";
                                    }

                                    if (studIDDict[data1.RefID].Class != null)
                                    {
                                        rec.班級 = studIDDict[data1.RefID].Class.Name;
                                    }
                                    else
                                    {
                                        rec.班級 = "";
                                    }
                                }

                                RATRecs.Add(rec);
                                CorrectableRecs.Add(data1);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                retMsg.Message = ex.Message;

                return(retMsg);
            }

            StringBuilder strBuilder = new StringBuilder();

            strBuilder.AppendLine("檢查學生自訂欄位資料筆數:" + UserDefDataList.Count);
            strBuilder.AppendLine("自訂欄位資料有重複筆數:" + RATRecs.Count);

            var SortedRATRecords = from RATRecord in RATRecs orderby RATRecord.狀態, RATRecord.班級, K12.Data.Int.ParseAllowNull(RATRecord.座號), RATRecord.欄位名稱, RATRecord.值 select RATRecord;

            retMsg.Message = strBuilder.ToString();
            retMsg.Data    = SortedRATRecords.ToList();

            return(retMsg);
        }