簡體   English   中英

使用linq無法獲得兩個列表之間的差異

[英]Not getting the difference between two list by using 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();

嘗試從第一個列表中刪除項目,該列表也在第二個列表中。

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

也嘗試過這個:

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

但是沒有得到准確的結果。 我想念的是什么? 謝謝。

最好使用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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM