简体   繁体   中英

Not getting the difference between two list by using linq

I have two lists as follows:

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 to remove the items from the first list, which are also in second list.

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

Tried this one too:

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

But not getting the accurate result. What I'm missing? Thanks.

Its better to use EMP_CODE because your objects are not comparable.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM