2014-02-06 92 views
0

獲得兩個列表之間的區別,我有兩個名單如下:不使用LINQ

var SeparatedEmployees = (from s in DataContext.HRM_EMP_TRMN.AsEnumerable() 
            where s.TRMN_FINL_STUS == "SA" && ((Convert.ToDateTime(s.TRMN_EFCT_DATE)).Year).ToString() == Year && ((Convert.ToDateTime(s.TRMN_EFCT_DATE)).Month).ToString() == HRMD_COMMON.ReturnMonthName(Month) 
            join e in DataContext.VW_HRM_EMPLOYEE on s.EMP_CODE equals e.EMP_CODE 
            where e.ACTIVE_STATUS == "A" 
            select new HRM_EMP_FINL_STMT_MSTModel 
            { 
             EMP_CODE = s.EMP_CODE, 
             EMP_NAME = e.EMP_NAME, 
             DIVI_CODE = e.DIVI_CODE, 
             DIVI_NAME = e.DIVI_NAME, 
             EMP_DESIG_CODE = e.EMP_DESIG_CODE, 
             EMP_DESIG_NAME = e.EMP_DESIG_NAME, 
             JOINING_DATE = HRMD_COMMON.ReturnOnlyDate(Convert.ToDateTime(e.JOINING_DATE)), 
             TRMN_TYPE = HRMD_COMMON.ReturnTerminationType(s.TRMN_TYPE), 
             TRMN_EFCT_DATE = HRMD_COMMON.ReturnOnlyDate(Convert.ToDateTime(s.TRMN_EFCT_DATE)), 
             LAST_SAL_PROS_MON = HRMD_COMMON.ReturnMonthName(s.LAST_SAL_PROS_MON), 
             FINL_STMT_REM = s.TRMN_REM 

            }).ToList(); 

     var ConfirmedEmployees = (from c in DataContext.HRM_EMP_FINL_STMT_MST.AsEnumerable() 
            where ((Convert.ToDateTime(c.FINL_STMT_DATE)).Year).ToString() == Year && ((Convert.ToDateTime(c.FINL_STMT_DATE)).Month).ToString() == HRMD_COMMON.ReturnMonthName(Month) 
            join e in DataContext.VW_HRM_EMPLOYEE on c.EMP_CODE equals e.EMP_CODE 
            join s in DataContext.HRM_EMP_TRMN on c.EMP_CODE equals s.EMP_CODE 
            select new HRM_EMP_FINL_STMT_MSTModel 
            { 
             EMP_CODE = s.EMP_CODE, 
             EMP_NAME = e.EMP_NAME, 
             DIVI_CODE = e.DIVI_CODE, 
             DIVI_NAME = e.DIVI_NAME, 
             EMP_DESIG_CODE = e.EMP_DESIG_CODE, 
             EMP_DESIG_NAME = e.EMP_DESIG_NAME, 
             JOINING_DATE = HRMD_COMMON.ReturnOnlyDate(Convert.ToDateTime(e.JOINING_DATE)), 
             TRMN_TYPE = HRMD_COMMON.ReturnTerminationType(s.TRMN_TYPE), 
             TRMN_EFCT_DATE = HRMD_COMMON.ReturnOnlyDate(Convert.ToDateTime(s.TRMN_EFCT_DATE)), 
             LAST_SAL_PROS_MON = HRMD_COMMON.ReturnMonthName(s.LAST_SAL_PROS_MON), 
             FINL_STMT_REM = s.TRMN_REM 
            }).ToList(); 

Tyring刪除從第一列表中的項目,這也是第二個列表。

var FinalSeparatedEmployees = (from item in SeparatedEmployees 
             where !ConfirmedEmployees.Contains(item) 
             select item).ToList(); 

試過這一個了:

FinalSeparatedEmployees = SeparatedEmployees.Except(ConfirmedEmployees).ToList<HRM_EMP_FINL_STMT_MSTModel>(); 

但沒有得到準確的結果。我錯過了什麼?謝謝。

回答

1

它更好地使用EMP_CODE,因爲您的對象不具有可比性。

var ids = ConfirmedEmployees.Select(x => x.EMP_CODE).ToList(); 
var FinalSeparatedEmployees = (from item in SeparatedEmployees 
            where !ids.Contains(item.EMP_CODE) 
            select item).ToList(); 
+0

偉大,它的工作,但它如何不可比?我在這兩個列表中都返回了相同的模型,不是嗎? –

+1

是的,但c#不知道要比較哪些屬性。如果你想要走這條路,你必須定義一個具有這些屬性的類並實現IEquatable ,然後在你的選擇中創建該類的一個實例。 – nima

+0

感謝您的解釋。現在我懂了。 –