Dinstinct重载

 var result = materialRelation.Select(x => new MaterialListOutput
            {
                MarkProgramId = x.FkMarkProgramId,
                MarkProgramName = programlist.Where(p => p.Id == x.FkMarkProgramId)?.FirstOrDefault()?.ProgramName,
                MaterialId = x.FkMaterialId,
                Status = materialList.Where(p => p.Id == x.FkMaterialId).FirstOrDefault().Status
            }).Distinct().ToList();

使用Distinct的时候,不会过滤重复数据

        /// <summary>
        /// distince重载
        /// </summary>
        private class MaterialDistinct : IEqualityComparer<MaterialListOutput>
        {
            public bool Equals(MaterialListOutput x, MaterialListOutput y)
            {
                return x.MaterialId == y.MaterialId && x.MarkProgramId==y.MarkProgramId&&x.Status==y.Status;
            }

            public int GetHashCode(MaterialListOutput obj)
            {
                return  $"{obj.MaterialId}_{obj.MarkProgramId}_{obj.Status}".GetHashCode();
            }

        }

使用以上方法重载

var result = materialRelation.Select(x => new MaterialListOutput
            {
                MarkProgramId = x.FkMarkProgramId,
                MarkProgramName = programlist.Where(p => p.Id == x.FkMarkProgramId)?.FirstOrDefault()?.ProgramName,
                MaterialId = x.FkMaterialId,
                Status = materialList.Where(p => p.Id == x.FkMaterialId).FirstOrDefault().Status
            }).Distinct(new MaterialDistinct()).ToList();

重载之后可以过滤了

posted on 2020-09-24 09:53  FFFYYY  阅读(142)  评论(0)    收藏  举报