简体   繁体   English

使用linq无法获得两个列表之间的差异

[英]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. 最好使用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