LINQ查询根据List的一个字段去重,某个字段数据相同的只取一条(可按条件)

  return (from m in db.XX
                    join d1 in db.XXX on m.INCOMING_SEQ equals d1.INCOMING_SEQ
                    join o in db.INCOMING_ORIGIN on m.INCOMING_ORIGIN_SEQ equals o.INCOMING_ORIGIN_SEQ
                    into org
                    from t in org.DefaultIfEmpty()
                    join d in db.DEPT on m.DEPT_SEQ equals d.DEPT_SEQ
                    join log in db.LOGIN_USER on d.DEPT_SEQ equals log.DEPT_SEQ
                    where log.ACCOUNT == account && m.INCOMING_PROCESS_ID == 20
                    select new QueryNoNoticePickUpOut
                    {
                        File = string.IsNullOrEmpty(d1.SIGN_JPG) ? null : url + folder + "/" + d1.SIGN_JPG,
                        Seq = m.INCOMING_SEQ,
                        Numbers = m.NUMBERS,
                        Recipient = m.USER_NAME,
                        OriginName = t == null ? "" : t.INCOMING_ORIGIN_NAME,
                        Date = m.ADD_TIMESTAMP
                    }).GroupBy(c=>c.Seq).Select(c=>c.Any(d=>d.File!=null)? c.Where(d=>d.File!=null).FirstOrDefault() : c.FirstOrDefault()).ToList();

重点:

return 返回的数据是多条,但是需要取一条,取一条的逻辑是,如果数据中文件File 不为null,那就去这条,不然就取第一条

.GroupBy(c=>c.Seq).Select(c=>c.Any(d=>d.File!=null)? c.Where(d=>d.File!=null).FirstOrDefault() : c.FirstOrDefault()).ToList();

版权声明:本文为younghaiqing原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。